步驟
經過半天的探索,參考VC下相同項目的源文件,我終於在LccWin32下做出帶菜單、圖標、系統菜單、最小/大化按鈕的對話框(Dialog)了。具體步驟如下列各圖所示,各圖中具有焦點的按鈕(Focused Button)即爲每一步最後要點擊的按鈕。其中項目的目錄等信息請大家根據自己的情況更改。
第一步
第二步
第三步
第四步
第五步
第六步
第七步
源代碼
其中粗體部分爲嚮導完成後,手工添加的代碼。
DlgTestres.h
IDD_MAINDIALOG 100
IDMAINMENU 600
IDM_NEW 200
IDM_OPEN 210
IDM_EXIT 300
IDM_ABOUT 500
IDAPPLICON 710
DlgTest.rc
__LCC__
<windows.h>
"dlgtestres.h"
IDAPPLICON ICON "D://Oscar//LccWin32//projects//dlgtest//app.ico"
IDMAINMENU MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New",IDM_NEW
MENUITEM "&Open",IDM_OPEN
MENUITEM "&E&xit",IDM_EXIT
END
POPUP "&Help"
BEGIN
MENUITEM "&About",IDM_ABOUT
END
END
IDD_MAINDIALOG DIALOG 7, 20, 195, 86
STYLE DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "DlgTest"
MENU IDMAINMENU
FONT 8, "Helv"
BEGIN
DEFPUSHBUTTON "OK", IDOK, 149, 6, 40, 14
PUSHBUTTON "Cancel", IDCANCEL, 149, 23, 40, 14
END
DlgTest.c
<windows.h>
<windowsx.h>
<commctrl.h>
<string.h>
"DlgTestres.h"
static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
HINSTANCE ghInst;
int APIENTRY WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wc;
INITCOMMONCONTROLSEX cc;
memset(&wc,0,sizeof(wc));
wc.lpfnWndProc = DefDlgProc;
wc.cbWndExtra = DLGWINDOWEXTRA;
wc.hInstance = hinst;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
wc.lpszClassName = "DlgTest";
RegisterClass(&wc);
memset(&cc,0,sizeof(cc));
cc.dwSize = sizeof(cc);
cc.dwICC = 0xffffffff;
InitCommonControlsEx(&cc);
ghInst = hinst;
return DialogBox(hinst, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, (DLGPROC) DialogFunc);
}
static int InitializeApp(HWND hDlg,WPARAM wParam, LPARAM lParam)
{
HICON hIcon = LoadIcon(ghInst, MAKEINTRESOURCE(IDAPPLICON));
SendMessage(hDlg, WM_SETICON, (WPARAM)ICON_BIG, (LPARAM)hIcon);
SendMessage(hDlg, WM_SETICON, (WPARAM)ICON_SMALL, (LPARAM)hIcon);
return 1;
}
static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_INITDIALOG:
InitializeApp(hwndDlg,wParam,lParam);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
EndDialog(hwndDlg,1);
return 1;
case IDCANCEL:
EndDialog(hwndDlg,0);
return 1;
}
break;
case WM_CLOSE:
EndDialog(hwndDlg,0);
return TRUE;
}
return FALSE;
}
效果
從下面的效果圖,大家可以看到,不僅對話框具有了系統菜單、普通菜單、最小/大化按鈕、圖標,而且在Windows中切換窗口時,切換欄顯示的是對話框的大圖標。兩處圖標再不是LccWin32默認編譯進資源文件的那個樸素的圖標了。