对不起英文版的屠宰,但是我找不到任何关于这方面的内容。用父窗口的控件打开新窗口
我想打开一个空的窗口在C++与WINAPI但新窗口打开父窗口的控制像一个克隆。
case VBTN:
{
vsa1 = CreateWindowEx(NULL,
L"Window Class",
L"Test",
WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT,
350, 275,
HWND_MESSAGE,
NULL,
GetModuleHandle(NULL),
NULL);
ShowWindow(vsa1, 10);
}
我试图WS_CHILD风格和HWND_MESSAGE在hwndParent,但他们都没有工作。
编辑:
LRESULT CALLBACK WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
HWND hWnd, vsa1;
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nShowCmd)
{
WNDCLASSEX vnWind;
WNDCLASSEX vnEk;
ZeroMemory(&vnWind, sizeof(WNDCLASSEX));
ZeroMemory(&vnEk, sizeof(WNDCLASSEX));
vnWind.cbClsExtra = NULL;
vnWind.cbSize = sizeof(WNDCLASSEX);
vnWind.cbWndExtra = NULL;
vnWind.hbrBackground = (HBRUSH)COLOR_WINDOW;
vnWind.hCursor = LoadCursor(NULL, IDC_ARROW);
vnWind.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(V_ICON_32));
vnWind.hIconSm = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(V_ICON_16));
vnWind.hInstance = hInst;
vnWind.lpfnWndProc = (WNDPROC)WinProc;
vnWind.lpszClassName = L"Window Class";
vnWind.lpszMenuName = NULL;
vnWind.style = CS_HREDRAW | CS_VREDRAW;
//same as vnWind ...
vnEk.lpszClassName = L"vnTest";
//same as vnWind ...
if(!RegisterClassEx(&vnWind))
{
MessageBox(NULL, L"Reg hatalı", L"Reg", NULL);
return 1;
}
if(!RegisterClassEx(&vnEk))
{
MessageBox(NULL, L"Reg1 hatalı", L"Reg", NULL);
return 1;
}
hWnd = CreateWindowEx(NULL,
L"Window Class",
L"Test Window*",
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT,
270, 80,
NULL,
NULL,
hInst,
NULL);
ShowWindow(hWnd, nShowCmd);
MSG msg;
ZeroMemory(&msg, sizeof(msg));
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
//...
case VBTN:
{
vsa1 = CreateWindowEx(NULL,
L"Window Class",
L"Test",
WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT,
350, 275,
HWND_MESSAGE,
NULL,
GetModuleHandle(NULL),
NULL);
ShowWindow(vsa1, 10);
}
//...
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
我的水晶球说你的WM_CREATE消息处理程序执行此操作。所以你应该再次调用RegisterClassEx()来注册另一个窗口类,它被命名为“Window class”以外的其他名称。 –
我改变了新的类'lpszClassName,但它仍然打开相同。 – Polkakorowakurwa
http://stackoverflow.com/help/mcve –