我在 Visual Studio 的 C 程式中為我的對話框、選單等使用資源檔案。只是想知道資源檔案是否具有全域范圍?此外,因此,在程式中呼叫 GetDlgItem 以獲取組合框句柄并加載其串列(以及其他類似任務)的理想位置在哪里?
有人可以舉一個簡單的例子,在使用資源檔案的背景關系中將串列項添加到組合框,而不是在使用代碼中顯式創建的組合框時嗎?
uj5u.com熱心網友回復:
評論中提供的資訊充分回答了這個問題。最初引發這個問題的是我希望并嘗試將專案放入組合框串列中。下面的代碼成功地實作了這一點。這主要是一個 Visual C 自動生成的訊息處理程序,用于主選單“編輯”下名為“添加”的下拉選單條目。在通過選擇添加生成的對話框中,有一個組合框,此處指定為 IDC_COMBO1。(IDC_COMBO1 是資源檔案中組合框的名稱,在 resource.h 中定義,因此在這里可以識別。)我在代碼中添加了三行以將條目“1st”放入組合框串列中。此外,正如 Richard Critten 所建議的那樣,我在 WM_INITDIALOG 訊息案例中處理了這個問題,這除了簡單明了之外還有意義。這三行是:
HWND hWndCB1;
hWndCB1 = GetDlgItem(hDlg, IDC_COMBO1);
SendMessage(hWndCB1, CB_ADDSTRING, 0, (LPARAM)TEXT("1st"));
當我構建專案時,條目“1st”出現在串列中。感謝那些發表評論的人,我希望這對試圖完成此任務的其他人有所幫助。訊息處理程序的代碼如下。
INT_PTR CALLBACK Add(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hWndCB1;
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
{
hWndCB1 = GetDlgItem(hDlg, IDC_COMBO1);
SendMessage(hWndCB1, CB_ADDSTRING, 0, (LPARAM)TEXT("1st"));
return (INT_PTR)TRUE;
}
break;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/534015.html
標籤:C winapi
