MFC 對話框工程中添加菜單(VC++ 6.0編譯器)


MFC 對話框工程中添加菜單(VC++ 6.0編譯器)

第一步:創建對話框資源和菜單資源.

第二步:添加菜單到對話框中

方法一:

在創建的對話框中右鍵,在Menu選項選擇自己的菜單ID如下圖

此時就可以了.

方法二:

不用方法一,直接添加代碼完成上述功能.

添加代碼到DialogDlg ::OnInitDialog中

CMenu *menu = new CMenu;

menu ->LoadMenu(MAKEINTRESOURCE(IDR_MENU)); //IDR_MENU 菜單ID

this ->SetMenu(menu);

或者

Cmenu m_menu;

m_menu.LoadMenu(IDR_MENU);

SetMenu(&m_menu);

此時結果如下圖

最后在添加菜單到對話框類中,實現其各種功能.

 

下面是在上面的基礎上實現的通用對話框空間的功能代碼,方便以后開發使用.

(1)打開文件對話框

條件:  OPENFILENAME結構體初始化

       GetOpenFileName函數調用

說明:  結構定義http://baike.baidu.com/view/2175167.htm

GetOpenFileName()通過OPENFILENAME這個結構體的大小來確定windows的版本的,初始化這個結構體的大小是必須的. OPENFILENAME stOF結構體必須清零.

1.1 獲取文件路徑名: char szFileName[MAX_PATH] = "";//必須初始化

                    stOF.lpstrFile = szFileName;

                    stOF.nMaxFile = MAX_PATH;// 必須和上面一起

1.2 標志: OFN_ALLOWMULTISELECT –允許選擇多個文件名

    OFN_CREATEPROMPT   -如果輸入不存在的文件名,對話框提問“是否建立文件”

    OFN_FILEMUSTEXIST  -只能選擇一個已經存在的文件名,必須使用OFN_PATHMUSTEXIST

    OFN_HIDEREADONLY   -對話框中不顯示“以只讀方式打開”復選框

    OFN_OVERWRITEPROMPT-在“保存”文件對話框中使用的時候,當選擇一個已存在的文件時,對話框會提問“是否覆蓋文件”。

    OFN_PATHMUSTEXIST  -輸入文件名時,路徑必須存在

    OFN_READONLY    -對話框中的“以只讀方式打開”復選框初始化的時候處於選中狀態

------------------------------------------------------------------------------

源程序:

    char szFileName[MAX_PATH] = "";

    OPENFILENAME stOF;               //必須的

    RtlZeroMemory(&stOF,sizeof(stOF));//必須的

    stOF.lStructSize = sizeof(stOF); //必須的

    stOF.hwndOwner = NULL;

    stOF.lpstrFilter = "Text Files(*.txt)\0 *.txt\0 All Files";

    stOF.lpstrFile = szFileName;

    stOF.nMaxFile = MAX_PATH;

    stOF.Flags = OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;

    if (GetOpenFileName(&stOF) != NULL)

    {

        MessageBox(szFileName, "執行結果", MB_OK);

    }

------------------------------------------------------------------------------

(2)文件另存為

------------------------------------------------------------------------------

 源代碼:

OPENFILENAME stOF;

    char szFileName[MAX_PATH] = "";

    memset(&stOF, 0, sizeof(OPENFILENAME));

    stOF.lStructSize = sizeof(stOF);

    stOF.hwndOwner = NULL;

    stOF.lpstrFilter = "Text Files(*.txt)\0 *.txt\0 All Files";

    stOF.lpstrFile = szFileName;

    stOF.nMaxFile = MAX_PATH;

    stOF.Flags = OFN_PATHMUSTEXIST;

    stOF.lpstrDefExt = "txt";

    stOF.lpstrTitle = "請輸入保存的文件名";

    if (GetSaveFileName(&stOF) != NULL)

    {

        MessageBox(szFileName, "執行結果", MB_OK);

    }

------------------------------------------------------------------------------

(3)頁面設置對話框

------------------------------------------------------------------------------

源代碼

PAGESETUPDLG stPS;

    char szBuffer[1024] = "";

    RtlZeroMemory(&stPS, sizeof(stPS));

    stPS.lStructSize = sizeof(PAGESETUPDLG);

    stPS.hwndOwner = NULL;

    if (PageSetupDlg(&stPS) && stPS.hDevMode)

    {

        wsprintf(szBuffer, "您選擇的打印機:%s",  GlobalLock(stPS.hDevMode));

        MessageBox(szBuffer,"執行結果", MB_OK);

    }

------------------------------------------------------------------------------

(4)字體

------------------------------------------------------------------------------

源代碼

    CHOOSEFONT stCF;

    char szBuffer[1024] = "";

    LOGFONT stLogFont = {5};

    COLORREF dwFontColor = RGB(0, 0, 0);

    RtlZeroMemory(&stCF, sizeof(stCF));

    stCF.lStructSize = sizeof(stCF);

    stCF.hwndOwner = NULL;

    stCF.lpLogFont = &stLogFont;

    stCF.rgbColors = dwFontColor;

    stCF.Flags = CF_SCREENFONTS|CF_INITTOLOGFONTSTRUCT|CF_EFFECTS;

    if (ChooseFont(&stCF) != NULL)

    {

        dwFontColor = stCF.rgbColors;

        wsprintf(szBuffer, "您的選擇\n字體名稱:%s\n字體顏色值:%08x\n字體大小:%d",

                      stLogFont.lfFaceName,

                      dwFontColor,

                      stCF.iPointSize);

        MessageBox(szBuffer, "執行結果", MB_OK);

    }

------------------------------------------------------------------------------

(5)顏色

------------------------------------------------------------------------------

源代碼

    CHOOSECOLOR stCC;

    COLORREF dwBackColor = RGB(0, 0, 0);

    COLORREF dwCustColors[16];

    char szBuffer[1024] = "";

    RtlZeroMemory(&stCC, sizeof(stCC));

    stCC.lStructSize = sizeof(stCC);

    stCC.hwndOwner = NULL;

    stCC.rgbResult = dwBackColor;

    stCC.Flags = CC_RGBINIT|CC_FULLOPEN;

    stCC.lpCustColors = dwCustColors;

    if (ChooseColor(&stCC))

    {

        dwBackColor = stCC.rgbResult;

        wsprintf(szBuffer, "您選擇的顏色值:%08x", dwBackColor);

        MessageBox(szBuffer,"執行結果", MB_OK);

    }

------------------------------------------------------------------------------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM