LccWin32下製作Dialog

步驟

經過半天的探索,參考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默認編譯進資源文件的那個樸素的圖標了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章