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