#include <Windows.h>
HWND g_hWnd;
HINSTANCE g_hInst;
BOOL bEllipse = TRUE;
LPCTSTR lpszClassName = TEXT("Wnd1");
LPCTSTR lpszChildName = TEXT("Wnd2");
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK ChildProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam);
INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
g_hInst = hInstance;
HWND hWnd;
WNDCLASS WndClass;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIc IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = WndProc;
WndClass.lpszClassName = lpszClassName;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd = CreateWindow(lpszClassName, TEXT("FUCKER!"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, (HMENU)NULL, hInstance, NULL);
WndClass.hCursor = LoadCursor(NULL, IDC_CROSS);
WndClass.lpfnWndProc = ChildProc;
WndClass.lpszClassName = TEXT("ChildCls");
RegisterClass(&WndClass);
ShowWindow(hWnd, nCmdShow);
MSG iMessage;
while (GetMessage(&iMessage, NULL, 0, 0))
{
TranslateMessage(&iMessage);
DispatchMessage(&iMessage);
}
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
switch (iMessage)
{
case WM_CREATE:
//MessageBox(hWnd, TEXT("FUCK"), NULL, NULL);
HWND hChild;
hChild = CreateWindow(TEXT("ChildCls"), TEXT("fuck") , WS_CHILD | WS_OVERLAPPEDWINDOW, 100, 100, 100, 100, hWnd, (HMENU)1000, g_hInst, NULL);
ShowWindow(hChild, SW_SHOW);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, iMessage, wParam, lParam);
}
LRESULT CALLBACK ChildProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch (iMessage)
{
case WM_CREATE:
MessageBox(hWnd, TEXT("FUCK"), NULL, NULL);
return 0;
case WM_LBUTTONDOWN:
bEllipse = !bEllipse;
InvalidateRect(hWnd, NULL, TRUE);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
if (bEllipse)
{
Ellipse(hdc, 10, 10, 90, 90);
}
else
{
MoveToEx(hdc, 10, 10, NULL); LineTo(hdc, 90, 90);
MoveToEx(hdc, 10, 90, NULL); LineTo(hdc, 90, 10);
}
EndPaint(hWnd, &ps);
return 0;
}
return DefWindowProc(hWnd, iMessage, wParam, lParam);
}
문제 발생 부분은 WndProc의 WM_CREATE 부분의 CreateWindow인데
이거 하면 X나 O표시된 차일드윈도우가 메인윈도우 안에 떠야되는데 아무리해도 안됨 ㅠㅠ
차일드윈도우 핸들인 hChild는 자꾸 널값만 반환하는데 뭔 인수 문제인지 모르겠음 ㅠㅠㅠㅜㅜㅜ
와 토나온다..