Dialog每个对话框=一个类(可以通过类向导生成对应的类)
每个控件ID是代码中的标示符,一般取名大写
Menu添加到对应对话框的方法:
方法一:
在创建的对话框中右键,在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);
菜单中的每个选项就变成了该对话框类中的一个控件成员,其功能的实现对应该选项的COMMAND的过程。
下面是在上面的基础上实现的通用对话框空间的功能代码,方便以后开发使用.
(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);
}