使用c ++,我创建了一个带有“WNDCLASS”结构的窗口。然后,我再次使用系统类“按钮”使用“CreateWindow”,并将父句柄设置为已创建的窗口的句柄。如何从窗口中删除此按钮?我试过调用“DestroyWindow”函数但没有任何反应。如果我不能,是否有办法完全擦除窗口并在没有按钮的情况下重新绘制所有内容,以便它不会出现?
#include <Windows.h>
#include <wchar.h>
HWND clientwindow;
RECT wr;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
DestroyWindow( clientwindow );
UpdateWindow( hWnd );
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
int WINAPI wWinMain( HINSTANCE hInst,HINSTANCE,LPWSTR,INT )
{
WNDCLASSEX wc = { sizeof( WNDCLASSEX ),CS_CLASSDC,WndProc,0,0,
GetModuleHandle( NULL ),NULL,NULL,NULL,NULL,
L"jjclass",NULL };
wc.hCursor = LoadCursor( NULL,IDC_ARROW );
RegisterClassEx( &wc );
wr.left = 650;
wr.right = wr.left + 500;
wr.top = 150;
wr.bottom = wr.top + 500;
AdjustWindowRect( &wr,WS_OVERLAPPEDWINDOW,FALSE );
HWND hWnd = CreateWindowW( L"jjclass",L"my window",
WS_OVERLAPPEDWINDOW,wr.left,wr.top,wr.right- wr.left,wr.bottom-wr.top,
NULL,NULL,wc.hInstance,NULL );
ShowWindow( hWnd,SW_SHOWDEFAULT );
clientwindow = CreateWindow( TEXT("BUTTON"),TEXT("BUTTON"),WS_VISIBLE | WS_CHILD,100,100,100,100,hWnd,(HMENU)1,NULL,NULL);
UpdateWindow( hWnd );
MSG msg;
ZeroMemory( &msg,sizeof( msg ) );
while( msg.message != WM_QUIT )
{
if( PeekMessage( &msg,NULL,0,0,PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
UnregisterClass( L"jjclass",wc.hInstance );
return 0;
}
答案 0 :(得分:3)
按钮实际上被破坏了,你只是看不到它。那是因为你太快停止了编程,你没有实现任何绘画代码。您将WNDCLASS.hbrBackGround成员设置为NULL时需要执行的操作,因此默认消息处理程序在处理WM_ERASEBKGND消息时无法执行任何有用的操作。
一个简单的解决方法是使用您在任何有关Windows编程的教程或书籍中找到的样板代码。为窗口背景指定画笔:
WNDCLASSEX wc = { sizeof( WNDCLASSEX ),CS_CLASSDC,WndProc,0,0,
GetModuleHandle( NULL ),NULL,NULL,
(HBRUSH)(COLOR_WINDOW+1), // <=== NOTE
NULL,
L"jjclass",NULL };
您的代码中有很多其他错误。如果你想写这样的代码,请阅读Petzold的编程Windows。