从窗口中删除按钮

时间:2013-05-12 10:13:15

标签: c windows winapi button

使用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;
}

1 个答案:

答案 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。