자식 창 내부를 그리는 방법은 무엇입니까?Win32 WM_PAINT 및 자식 창
CreateWindow(WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN)
WndProc
(WM_PAINT
제외)과 함께 주 창을 만들어야한다고 생각했습니다. 그 WM_CREATE
에 WM_PAINT
에 반응하는 다른 WndProc2
과 함께 또 다른 창 CreateWindow(WS_CHILD | WS_CLIPCHILDREN)
을 만듭니다. 그러나 다른 처리기가 무한 루프에 들어간 것으로 보입니다. 나는 무엇을 잘못 했는가?
제발, 조언이나 시험이 있으십니까?
PS : WS_CLIPCHILDREN이 영향을 미칠 것으로 보인다 및 DefWindowProc
에 WndProc
기본적으로 모두하지 않는 코드 :
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);
WM_PAINT 처리를 수행 한 후 0을 반환합니까? 그 너머에 ... wndprocs와 Create와 RegisterClass 호출을 보여주세요. – Goz