步骤
经过半天的探索,参考VC下相同项目的源文件,我终于在LccWin32下做出带菜单、图标、系统菜单、最小/大化按钮的对话框(Dialog)了。具体步骤如下列各图所示,各图中具有焦点的按钮(Focused Button)即为每一步最后要点击的按钮。其中项目的目录等信息请大家根据自己的情况更改。
第一步

第二步

第三步

第四步

第五步

第六步

第七步

源代码
其中粗体部分为向导完成后,手工添加的代码。
DlgTestres.h
#define IDD_MAINDIALOG 100
#define IDMAINMENU 600
#define IDM_NEW 200
#define IDM_OPEN 210
#define IDM_EXIT 300
#define IDM_ABOUT 500
#define IDAPPLICON 710
DlgTest.rc
#ifdef __LCC__
#include <windows.h>
#endif
#include "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
ENDIDD_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
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include <string.h>
#include "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默认编译进资源文件的那个朴素的图标了。

