从窗口中删除button

使用c ++,我创build了一个“WNDCLASS”结构的窗口。 然后,我再次使用系统类“button”再次使用“CreateWindow”,并将父句柄设置为已经创build的窗口的句柄。 我怎样才能从窗口中删除这个button? 我曾尝试调用“DestroyWindow”函数,但没有任何反应。 如果我不能,是否有办法完全擦拭窗口,并重新绘制所有的东西没有button,所以它不会出现?

#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; } 

按钮实际上被破坏,你只是看不到它。 那是因为你停止编程太快,你没有实现任何绘画代码。 自从将WNDCLASS.hbrBackGround成员设置为NULL后,您需要执行此操作,以便默认消息处理程序在处理WM_ERASEBKGND消息时不能执行任何有用的操作。

一个简单的解决方法是使用任何教程或书中有关Windows编程的样板代码。 为窗口背景指定一个画笔:

 WNDCLASSEX wc = { sizeof( WNDCLASSEX ),CS_CLASSDC,WndProc,0,0, GetmoduleeHandle( NULL ),NULL,NULL, (HBRUSH)(COLOR_WINDOW+1), // <=== NOTE NULL, L"jjclass",NULL }; 

你的代码中有很多其他的东西是错误的。 如果你想写这样的代码,请阅读Petzold的编程Windows。