MFC 对话框工程中添加菜单(VC++ 6.0编译器)

时间:2023-02-10 08:16:36

MFC 对话框工程中添加菜单(VC++ 6.0编译器)

第一步:创建对话框资源和菜单资源.

第二步:添加菜单到对话框中

方法一:

在创建的对话框中右键,在Menu选项选择自己的菜单ID如下图

MFC 对话框工程中添加菜单(VC++ 6.0编译器)

此时就可以了.

方法二:

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

添加代码到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);

此时结果如下图

MFC 对话框工程中添加菜单(VC++ 6.0编译器)

最后在添加菜单到对话框类中,实现其各种功能.

 

下面是在上面的基础上实现的通用对话框空间的功能代码,方便以后开发使用.

(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);

    }

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