까도 올렸었지만 뭐가 문젠지 아직도 몰라서 다시 올려봄
메인윈도우에서 O,X를 표시하는 차일드윈도우하나 생성해야되는데
CreateWindow 해도 자꾸 hChild에 NULL값이 리턴됨. (HMENU)NULL 해보고 스타일값 변경해줘보고 해도 안됨
김상형책 보고 하고있는데 옛날책이라 요즘은 구현방법이 달라진건지 뭐가 문제인지 모르겠슴
#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);
}
변수명 거지같네 거참- From DC 도우미+
이 변수명 예제에 있는 그대로인데;