我使用vc++编程,我使用RegisterClassEx注册了窗口类,怎么用CreateWindow创建该类的MDI窗口?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我使用vc++编程,我使用RegisterClassEx注册了窗口类,怎么用CreateWindow创建该类的MDI窗口?相关的知识,希望对你有一定的参考价值。
使用RegisterClassEx创建子窗口类后,
使用CreateWindow(_TEXT("MDICLIENT"), NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE,
0, 0, rectMain.right, 50, hWnd, NULL, hInstance, (PSTR)&lsSet1);
创建了hwnd的MDI窗口,怎样才能使新创建的MDI窗口与刚刚注册的窗口类相关联呢?
#include <windows.h>
#include <tchar.h>
HINSTANCE hInst;
ATOM WindowRegister(WNDPROC lpfnWndProc, char *lpClname, HBRUSH hbrBack)
WNDCLASSEX wnd;
wnd.cbClsExtra = 0;
wnd.cbSize = sizeof(WNDCLASSEX);
wnd.cbWndExtra = 0;
wnd.hbrBackground = hbrBack;
wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wnd.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wnd.hInstance = hInst;
wnd.lpfnWndProc = lpfnWndProc;
wnd.lpszClassName = lpClname;
wnd.lpszMenuName = NULL;
wnd.style = CS_HREDRAW | CS_VREDRAW;
return RegisterClassEx(&wnd);
LRESULT CALLBACK ClientProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
HWND hWndEdit;
switch (uMsg)
case WM_CREATE:
RECT rect;
GetClientRect(hWnd, &rect);
hWndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("Edit"), NULL,
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_MULTILINE,
0, 0, rect.right, rect.bottom, hWnd, NULL, hInst, NULL);
return 0;
case WM_SIZE:
hWndEdit = GetWindow(hWnd, GW_CHILD);
GetClientRect(hWnd, &rect);
SetWindowPos(hWndEdit, NULL, 0, 0, rect.right, rect.bottom, SWP_NOMOVE | SWP_NOZORDER);
break;
case WM_MDIACTIVATE:
return 0;
return DefMDIChildProc(hWnd, uMsg, wParam, lParam);
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
static HWND hClient;
MDICREATESTRUCT mdic;
switch (uMsg)
case WM_CREATE:
WindowRegister(ClientProc, _T("Client"), (HBRUSH)GetStockObject(WHITE_BRUSH));
HMENU hMenu;
hMenu = CreateMenu();
AppendMenu(hMenu, MF_STRING, 1000, _T("New(&N)"));
SetMenu(hWnd, hMenu);
CLIENTCREATESTRUCT ccs;
ccs.hWindowMenu = NULL;
ccs.idFirstChild = 100;
hClient = CreateWindow(_T("MDICLIENT"), NULL,
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,
0, 0, 0, 0, hWnd, NULL, hInst, &ccs);
return 0;
case WM_DESTROY: PostQuitMessage(0); return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
case 1000:
mdic.szClass = _T("Client");
mdic.szTitle = _T("Document");
mdic.hOwner = hInst;
mdic.x = CW_USEDEFAULT;
mdic.y = CW_USEDEFAULT;
mdic.cx = CW_USEDEFAULT;
mdic.cy = CW_USEDEFAULT;
mdic.style = 0;
mdic.lParam = 0;
HWND hChild;
hChild = (HWND)SendMessage(hClient, WM_MDICREATE, 0, (LPARAM)&mdic);
break;
default:
hChild = (HWND)SendMessage(hClient, WM_MDIGETACTIVE, 0, 0);
if (IsWindow(hChild)) SendMessage(hChild, WM_COMMAND, wParam, lParam);
break;
break;
return DefFrameProc(hWnd, hClient, uMsg, wParam, lParam);
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nShowCmd)
hInst = hInstance;
WindowRegister(WndProc, _T("Sample"), (HBRUSH)(COLOR_APPWORKSPACE + 1));
HWND hWnd = CreateWindow(_T("Sample"), _T("Sample"),
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
100, 100, 500, 400, NULL, NULL, hInstance, NULL);
if (!hWnd) return FALSE;
HWND hClient = GetWindow(hWnd, GW_CHILD);
ShowWindow(hWnd, nShowCmd);
UpdateWindow(hWnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
if (!TranslateMDISysAccel(hClient, &msg))
TranslateMessage(&msg);
DispatchMessage(&msg);
return msg.wParam;
参考技术A 你在用CreateWindow函数创建窗口时,该函数的第一个参数,是窗口类名,你只要用你上面注册的窗口类的类名,这样就联系上了。
以上是关于我使用vc++编程,我使用RegisterClassEx注册了窗口类,怎么用CreateWindow创建该类的MDI窗口?的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationController appDelegate UIViewController以编程方式