WIN32 API
[핵심 API로 배우는 윈도우프로그래밍(강경우, 한빛아카데미)] 7장 2번 풀이
오다기리 박
2017. 11. 3. 21:59
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | #include <Windows.h> #include<tchar.h> #include<string.h> #include<math.h> #include"resource.h" //#pragma comment(linker,"/entry:WinMainCRTStartup /subsystem:console") LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK ChildWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam); HINSTANCE hInst; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASS WndClass; hInst = hInstance; WndClass.style = CS_HREDRAW | CS_VREDRAW; WndClass.lpfnWndProc = FrameWndProc; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = hInstance; WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); WndClass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU2); WndClass.lpszClassName = _T("Window Class Name"); RegisterClass(&WndClass); WndClass.lpfnWndProc = ChildWndProc; WndClass.lpszMenuName = NULL; WndClass.lpszClassName = _T("Child Window Class Name"); RegisterClass(&WndClass); hwnd = CreateWindow( _T("Window Class Name"), _T("Main Window Title"), WS_OVERLAPPEDWINDOW, 50, 50, 1000, 700, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static HWND hwndClient; HWND hwndChild; CLIENTCREATESTRUCT clientcreate; MDICREATESTRUCT mdicreate; OPENFILENAME OFN; TCHAR filter[] = _T("Every File(*.*)\0*.*\0Text File\0*.txt;*.doc\0"); TCHAR lpstrFile[100] = _T(""); TCHAR str[100]; switch (iMsg) { case WM_CREATE: clientcreate.hWindowMenu = GetSubMenu(GetMenu(hwnd), 0); clientcreate.idFirstChild = 100; hwndClient = CreateWindow(_T("MDICLIENT"), NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, 0, 0, 0, 0, hwnd, NULL, hInst, (LPSTR)&clientcreate); ShowWindow(hwndClient, SW_SHOW); break; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_FILENEW: mdicreate.szClass = _T("Child Window Class Name"); mdicreate.szTitle = _T("NoName"); mdicreate.hOwner = hInst; mdicreate.style = 0; mdicreate.lParam = 0; mdicreate.x = CW_USEDEFAULT; mdicreate.y = CW_USEDEFAULT; mdicreate.cx = CW_USEDEFAULT; mdicreate.cy = CW_USEDEFAULT; hwndChild = (HWND)SendMessage(hwndClient, WM_MDICREATE, 0, (LPARAM)(LPMDICREATESTRUCT)&mdicreate); break; case ID_FILEOPEN: memset(&OFN, 0, sizeof(OPENFILENAME)); OFN.lStructSize = sizeof(OPENFILENAME); OFN.hwndOwner = hwnd; OFN.lpstrFilter = filter; OFN.lpstrFile = lpstrFile; OFN.nMaxFile = 256; OFN.lpstrInitialDir = _T("."); if (GetOpenFileName(&OFN) != 0) { _stprintf_s(str, 100, _T("%s를 여시겠습니까"),OFN.lpstrFile); MessageBox(hwnd, str, _T("파일열기"), MB_OK); } mdicreate.szClass = _T("Child Window Class Name"); mdicreate.szTitle = OFN.lpstrFile; mdicreate.hOwner = hInst; mdicreate.style = 0; mdicreate.lParam = 0; mdicreate.x = CW_USEDEFAULT; mdicreate.y = CW_USEDEFAULT; mdicreate.cx = CW_USEDEFAULT; mdicreate.cy = CW_USEDEFAULT; hwndChild = (HWND)SendMessage(hwndClient, WM_MDICREATE, 0, (LPARAM)(LPMDICREATESTRUCT)&mdicreate); break; } break; case WM_DESTROY: PostQuitMessage(0); break; } return DefFrameProc(hwnd, hwndClient, iMsg, wParam, lParam); } LRESULT CALLBACK ChildWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch (iMsg) { case WM_CREATE: break; case WM_DESTROY: PostQuitMessage(0); break; } return DefMDIChildProc(hwnd, iMsg, wParam, lParam); } | cs |