對不起英文版的屠宰,但是我找不到任何關於這方面的內容。用父窗口的控件打開新窗口
我想打開一個空的窗口在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 –