Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi Win32 WM_PAINT和子窗口_Winapi_Paint_Onpaint - Fatal编程技术网

Winapi Win32 WM_PAINT和子窗口

Winapi Win32 WM_PAINT和子窗口,winapi,paint,onpaint,Winapi,Paint,Onpaint,如何在子窗口内绘制 我想我应该创建主窗口CreateWindowWS|U OVERLAPPEDWINDOW | WS|U CLIPCHILDREN,其中包含一些没有WM|U绘制的WndProc。在它的WM_CREATE上,我创建了另一个窗口CreateWindowWS_CHILD | WS_CLIPCHILDREN和另一个对WM_PAINT起反应的WNDPOC2。 然而,另一个处理程序似乎进入了一个无限循环。我做错了什么 拜托,你没有什么建议或建议吗 PS:WS_CLIPCHILDREN似乎不会

如何在子窗口内绘制

我想我应该创建主窗口CreateWindowWS|U OVERLAPPEDWINDOW | WS|U CLIPCHILDREN,其中包含一些没有WM|U绘制的WndProc。在它的WM_CREATE上,我创建了另一个窗口CreateWindowWS_CHILD | WS_CLIPCHILDREN和另一个对WM_PAINT起反应的WNDPOC2。 然而,另一个处理程序似乎进入了一个无限循环。我做错了什么

拜托,你没有什么建议或建议吗

PS:WS_CLIPCHILDREN似乎不会影响这一点,WndProc和WndProc都默认为DefWindowProc

守则:


LRESULT CALLBACK Proc2(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
   switch(msg)
    {
        case WM_CREATE:
            printf("-------\n");
            return 0;
        case WM_PAINT:
            printf("-");
            return 0;

        default:
            return DefWindowProc(hWnd, msg, wParam, lParam);
    }
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
...
case WM_CREATE:
    CreateWindowClass(hInstance, Proc2, "Window2");
    w2 = CreateWindowEx(WS_EX_STATICEDGE, "Window2", "Win", WS_CHILD | WS_CLIPCHILDREN, 0, 0, 100, 100, hWnd, NULL, hInstance, NULL);


void createWindowClass(HINSTANCE hInstance, WNDPROC WndProc, LPCSTR lpszClassName)
{
    WNDCLASSEX wc;
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wc.lpszMenuName  = "test";
    wc.lpszClassName = lpszClassName;
    RegisterClassEx(&wc);
}

int WINAPI WinMain
...
createWindowClass(hInstance, WndProc, "MainWindow");
w = CreateWindow("MainWindow", "Main", WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);



您应该调用BeginPaint和EndPaint来响应WM_PAINT消息以验证窗口。否则,系统会认为您的窗口尚未绘制,因此会一次又一次地发送绘制消息。请参见

您应该调用BeginPaint和EndPaint以响应WM_PAINT消息以验证窗口。否则,系统会认为您的窗口尚未绘制,因此会一次又一次地发送绘制消息。请参见

执行WM_绘制处理后是否返回0?除此之外。。。向我们显示您的WNDPROC、Create和RegisterClass调用。在执行WM_绘制处理后是否返回0?除此之外。。。向我们展示您的WNDPROC以及您的Create和RegisterClass调用。