【问题标题】:What is the style to allow win api window to be resizeable?允许winapi窗口调整大小的样式是什么?
【发布时间】:2013-06-09 19:49:05
【问题描述】:

我已经搜索了一段时间,但找不到我正在寻找的答案或风格。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx

允许我的窗口调整大小的标志是什么。

我现在有这个:

WNDCLASSEX wcex;
    wcex.cbSize = sizeof(WNDCLASSEX); 
    wcex.style= CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc= (WNDPROC)WndProc;
    wcex.cbClsExtra= 0;
    wcex.cbWndExtra= 0;
    wcex.hInstance= hInstance;
    wcex.hIcon= 0;
    wcex.hCursor= LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName= 0;
    wcex.lpszClassName= "bla";
    wcex.hIconSm= 0;

HWND hWnd = CreateWindow(
    "bla", 
    "bla", 
    WS_OVERLAPPEDWINDOW, 
    CW_USEDEFAULT, 
    CW_USEDEFAULT, 
    CW_USEDEFAULT, 
    CW_USEDEFAULT, 
    NULL, NULL, hInstance, NULL);

我的 Proc 是:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) 
    {
        case WM_SIZE:
            screenServer.OnScreenResize( LOWORD(lParam), HIWORD(lParam) );
        break;
        case WM_NCHITTEST:
            return HTCLIENT;
        break;
        case WM_MOUSEMOVE:
        {
            //SetCapture(hWnd);

            // Retrieve mouse screen position
            int x = ( short )LOWORD( lParam );
            int y = ( short )HIWORD( lParam );

            mouseServer.OnMouseMove( x, y );

            //ReleaseCapture();
        }
        break;
        case WM_RBUTTONDOWN:
            mouseServer.OnRightMouseDown();
        break;
        case WM_RBUTTONUP:
            mouseServer.OnRightMouseUp();
        break;
        case WM_LBUTTONDOWN:
            mouseServer.OnLeftMouseDown();
        break;
        case WM_LBUTTONUP:
            mouseServer.OnLeftMouseUp();
        break;
        case WM_DESTROY:
            PostQuitMessage( 0 );
        break;
        case WM_KEYDOWN:
        {
             //switch(wParam)
             //{
                // case 'ESC':
                //    // w key pressed
                // break;
                // default:
                //   break;
             //}
        }
        default:
            return DefWindowProc( hWnd, message, wParam, lParam );
    }

    return 0;
}

【问题讨论】:

    标签: winapi resize window


    【解决方案1】:

    根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600%28v=vs.85%29.aspx

    WS_SIZEBOX 0x00040000L

    窗口有一个大小调整边框。与 WS_THICKFRAME 样式相同。

    WS_THICKFRAME 0x00040000L

    窗口有一个大小调整边框。与 WS_SIZEBOX 样式相同。

    【讨论】:

    • @JamesT 你的程序已经有WS_SIZEBOX,所以添加它不能改变任何东西。还是您删除了所有其他标志?
    【解决方案2】:

    您要查找的窗口样式是WS_THICKFRAME。请注意,WS_OVERLAPPEDWINDOW 包含 WS_THICKFRAME,因此您的窗口已经很大了。

    您对WM_NCHITTEST 的窗口过程处理是阻止调整大小工作的原因。从 switch 语句中删除这种情况,调整大小应该重新开始工作。

    【讨论】:

    • 在这种情况下它可能无法调整大小的任何原因?
    • 很明显你的代码中还有其他东西阻止了它。
    • 我已经添加了我认为可能相关的唯一其他位
    • 嗯,WndProc的内容才是最重要的
    • 好的,我已经在上面添加了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2021-04-15
    • 2011-02-25
    • 2016-06-01
    • 2019-08-27
    相关资源
    最近更新 更多