我從我的控制檯應用程序創建消息窗口。窗口類被正確註冊並且窗口被正確創建,但是它從來沒有標題(而我的createwindow函數調用確實指定了標題)。 讓我想,可以控制檯程序創建窗口的名稱?谷歌搜索,沒有發現。 這是我的代碼,保持在最低限度:創建窗口沒有標題
using namespace std;
hInstance = GetModuleHandle(NULL);
WNDCLASS WndClass = {};
WndClass.style = CS_HREDRAW | CS_VREDRAW; // == 0x03
WndClass.lpfnWndProc = pWndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hIcon = 0;
WndClass.hCursor = 0;
WndClass.hbrBackground = (HBRUSH)COLOR_WINDOWFRAME;
WndClass.lpszMenuName = 0;
WndClass.lpszClassName = "EME.LauncherWnd";
int style = WS_OVERLAPPED | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU | WS_THICKFRAME | WS_CAPTION;
if (RegisterClassA(&WndClass))
{
cout << "class registered. Hinstance : " << hInstance << " style : (expect 0xcf0000) " << std::hex << style << endl;
HWND hwind2 = CreateWindowExA(0, "EME.LauncherWnd", "Mytitle", style, 0x80000000, 0x80000000, 0x80000000, 0x80000000, NULL, NULL, hInstance, NULL);
if (hwind2 == 0)
cout << "Couldn't create window" << endl;
else
cout << "created window" << endl;
}
輸出:
class registered. Hinstance : 00E40000
created window
與Nirsoft的Winlister檢查,存在窗口,有權類( 「EME.LauncherWnd」),但無名。 此外,添加這些行的代碼塊中的:
if (0 == SetWindowText(hwind2, "aTitle"))
cout << "couldn't set a title" << endl;
else
cout << "title set " << endl;
輸出是
title set
然而,窗口仍然沒有標題。如果控制檯程序不能有標題,我會假設SetWindowText調用將返回0. 我做錯了什麼? 編輯:如請求
LRESULT CALLBACK pWndProc(HWND hwnd, // Handle to our main window
UINT Msg, // Our message that needs to be processed
WPARAM wParam, // Extra values of message
LPARAM lParam) // Extra values of message
{
switch (Msg)
{
case WM_DESTROY:
....
break;
}
}
雖然評論指出了pWndProc(我認爲哪個機構無關的窗口的結構)後添加pWndProc,原來插入這個代碼行作爲所述開關的默認案例
return DefWindowProc(hwnd, Msg, wParam, lParam);
解決了這個問題。
「*可以控制檯程序創建窗口名稱?*」 - 當然,是的。終端本身只是一個普通的Win32應用程序。控制檯應用程序可以完全訪問Win32 API。這就是說,pWndProc指的是什麼,它正確地處理窗口消息? –
u nead a massage loop –
投票結束,因爲缺乏可重複的例子。 –