VC++实现对话框工程中添加菜单
VC++控件使用——菜单
VC++控件使⽤——菜单VC++简单应⽤指南四——菜单⼀、菜单资源设计1.打开⼯作区窗⼝,在Resource View选项卡中,右击,选择插⼊2.打开插⼊资源对话框,选择Menu节点,点击新建3.打开菜单资源设计窗⼝,再按Enter键,显⽰菜单资源属性窗⼝4.在菜单资源属性窗⼝中填写标题5.选中菜单标题填写的⼦菜单,并点击Enter 键或者双击6.添加分割线,在菜单资源属性中点选分隔符(Separator)7.⼦菜单添加弹出菜单,菜单资源属性中点选弹出(Pop-up)8.给菜单添加快捷键,在标题后添加“&+字母”,则Alt+字母就是快捷键⼆、菜单项的命令处理1.命令设置在类向导中;打开类向导,点选Message Maps选项卡2.打开Message Maps选项卡,Class name对应对话框;Object IDs对应菜单项ID;Messages 对应事件:COMMAND单击事件3.选择COMMAND单击事件,点击Add Function,弹出创建窗⼝,点击OK4.在类向导中点击Edit Code按钮,显⽰命令处理函数三、动态创建菜单1.创建基于对话框的应⽤程序2.头⽂件中声明⼀个CMenu类对象m_Menu3.1在FileView选项卡中打开资源头⽂件(Resource.h),定义命令ID3.2在资源头⽂件中添加的代码如下#define ID_MENUCAT 1001#define ID_MENUDOG 1002#define ID_MENUMONKEY 10034.1在对话框OnInitDialog⽅法中创建菜单 4.2创建菜单程序m_Menu.CreateMenu();CMenu m_PopMenu;m_PopMenu.CreatePopupMenu();m_Menu.AppendMenu(MF_POPUP,(UINT)m_PopMenu,m_hMenu,"动物");m_PopMenu.AppendMenu(MF_STRING,ID_MENUCAT,"猫");m_PopMenu.AppendMenu(MF_STRING,ID_MENUDOG,"狗");m_PopMenu.AppendMenu(MF_STRING,ID_MENUMONKEY,"猴⼦");m_PopMenu.Detach();SetMenu(&m_Menu);5.2程序5.1在对话框的头⽂件中声明菜单的消息处理函数afx_msg void OnMenucat();afx_msg void OnMenudog();afx_msg void OnMenumonkey();6.2程序6.1在对话框源⽂件中添加消息映射宏,将命令ID关联到消息处理函数中ON_COMMAND(ID_MENUCAT,OnMenucat)ON_COMMAND(ID_MENUDOG,OnMenudog)ON_COMMAND(ID_MENUMONKEY,OnMenumonkey) 7.1在对话框源⽂件中添加消息处理函数7.2程序void CMy124Dlg::OnMenucat(){MessageBox("猫");}void CMy124Dlg::OnMenudog(){MessageBox("狗");}void CMy124Dlg::OnMenumonkey(){MessageBox("猴⼦");}四、创建弹出式菜单1.创建基于对话框的应⽤程序2.在资源选项卡中右击,选择插⼊,在插⼊资源窗⼝中选择Menu 点击新建3.对菜单进⾏编辑4.在对话框头⽂件中声明⼀个CMenu类对象m_Menu6.在类视图选项卡中,右击对话框程序节点,然后选择Add Windows Message Handler命令,在弹出的对话框中选择WM_RBUTTONUP 事件,点击Add Handler ,点击确定:⿏标右键抬起触发m_Menu.LoadMenu(IDR_MENU1);7.1在⿏标右键抬起事件处理函数中添加代码7.2程序CMenu *pMenu =m_Menu.GetSubMenu(0);CRect rect;ClientToScreen(&point);rect.top = point.x;rect.left = point.y;pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,rect.top,rect.left,this,&rect);8.1给弹出菜单中添加⽂件增加单击事件8.2程序MessageBox("成功");五、创建图标菜单1.创建基于对话框的应⽤程序2.在⼯作区窗⼝选择Recource View选项卡,右击⼀个节点,弹出快捷菜单,点击Insert命令3.在插⼊资源窗⼝,选择菜单资源,插⼊并编辑4.新建⼀个类;打开类向导,创建类名为CMenuIcon,5.打开CMenuIcon类的头⽂件,为该类添加⼀个基类Cmenu6.1在CMenuIcon头⽂件中定义⼀个数据结6.2程序构,⽤来保存菜单信息struct CMenuItem{CString m_ItemText;int m_IconIndex;int m_ItemID;};int m_Index;int m_IconIndex;CImageList m_ImageList;8.2程序8.1在CMenuIcon类的构造函数中初始化图像列表m_Index=0;m_IconIndex=0;m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,0,0);m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON4));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON5));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON6));9.1在CMenuIcon类中添加AttatchMenu⽅法9.2AttatchMenu⽅法中添加程序9.3程序LoadMenu(m_uID);return TRUE;10.210.1在CMenuIcon类中添加MenuItem⽅法,并添加程序BOOL CMenuIcon::MenuItem(CMenu *pMenu){if(pMenu!=NULL){int m_Count=pMenu->GetMenuItemCount();for(int i=0;ipMenu->GetMenuString(i,m_ItemLists[m_Index].m_ItemText,MF_B YPOSITION);int m_itemID=pMenu->GetMenuItemID(i);m_ItemLists[m_Index].m_ItemID=m_itemID;if(m_itemID>0){m_ItemLists[m_Index].m_IconIndex=m_IconIndex;m_IconIndex+=1;}RING,m_ItemLists[m_Index].m_ItemID,(LPSTR)&(m_ItemLists[m_Index])); m_Index+=1;CMenu *m_SubMenu=pMenu->GetSubMenu(i);if(m_SubMenu){MenuItem(m_SubMenu);}}} return TRUE;}11.2程序11.1重载CMenuIcon类中MeasureItem虚拟⽅法,计算菜单项的⼤⼩1.在类上⽅右击,选择新建成员函数,并创建voidCMenuIcon::MeasureItem(LPMEASUREITEMSTRUCT IpStruct){if(IpStruct->CtlType==ODT_MENU){IpStruct->itemHeight=ITEMHEIGHT;IpStruct->itemWidth=ITEMWIDTH;CMenuItem* m_item;m_item=(CMenuItem*)IpStruct->itemData;IpStruct->itemWidth=((CMenuItem*)IpStruct->itemData)->m_ItemText.GetLength()*10;if(m_item->m_ItemID==0){IpStruct->itemHeight=2;}}}员函数,绘制菜单项⽂本void CMenuIcon::DrawItemText(CDC *pDC,LPSTR Str, CRect Rect){pDC->DrawText(Str,Rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);13.2程序13.1在CMenuIcon类中添加DrawItemIcon成员函数,绘制菜单项图标void CMenuIcon::DrawItemIcon(CDC *pDC, CRect Rect, int Icon){m_ImageList.Draw(pDC,Icon,CPoint(Rect.left+2,Rect.top+4),ILD_TRANSPARENT);}14.2程序14.1在CMenuIcon类中添加DrawSeparater成员函数,绘制分隔条void CMenuIcon::DrawSeparater(CDC *pDC, CRect Rect){pDC->Draw3dRect(Rect,RGB(255,0,255),RGB(255,0,255));}15.2程序15.1在CMenuIcon类中添加DrawTopMenu成员函数,绘制顶层菜单void CMenuIcon::DrawTopMenu(CDC *pDC, CRect Rect, BOOL Selected){if(Selected){pDC->Rectangle(&Rect);Rect.DeflateRect(1,1);pDC->FillSolidRect(Rect,RGB(192,170,220));}else{pDC->FillSolidRect(&Rect,RGB(192,192,192));}成员函数,绘制普通菜单项void CMenuIcon::DrawComMenu(CDC *pDC, CRect Rect, BOOL Selected) {if(Selected){pDC->Rectangle(&Rect);Rect.DeflateRect(1,1);pDC->FillSolidRect(Rect,RGB(255,0,0));}else{pDC->FillSolidRect(&Rect,RGB(255,255,255));}}17.2程序17.1重载CMenuIcon类中DrawItem虚拟⽅法,根据菜单项的不同状态绘制菜单项void CMenuIcon::DrawItem(LPDRAWITEMSTRUCT IpStruct){ if(IpStruct->CtlType==ODT_MENU) {if(IpStruct->itemData==NULL)return;unsigned int m_state=IpStruct->itemState;CDC* pDC=CDC::FromHandle(IpStruct->hDC);CString str =((CMenuItem*)(IpStruct->itemData))->m_ItemText;LPSTR m_str = str.GetBuffer(str.GetLength());intm_itemID=((CMenuItem*)(IpStruct->itemData))->m_ItemID;intm_itemicon=((CMenuItem*)(IpStruct->itemData))->m_IconIndex;CRect m_rect=IpStruct->rcItem;pDC->SetBkMode(TRANSPARENT);switch(m_itemID) {case -1: {DrawTopMenu(pDC,m_rect,(m_state&ODS_SELECTED)||(mDrawItemText(pDC,m_str,m_rect);break; }case 0: {DrawSeparater(pDC,m_rect);break;}default: {DrawComMenu(pDC,m_rect,m_state&ODS_SELECTED);DrawItemText(pDC,m_str,m_rect);DrawItemIcon(pDC,m_rect,m_itemicon);break; }}}}18.在对话框头⽂件中声明CMenuIcon类对象m_Menu 19.在对话框OnInitDialog⽅法中加载菜单资源,并设置菜单项m_Menu.AttatchMenu(IDR_MENU1);m_Menu.MenuItem(&m_Menu);this->SetMenu(&m_Menu);20重载对话框的OnDrawItem⽅法,在该⽅法中体⽤菜单类中DrawItem⽅法21重载对话框的OnMeasureItem⽅法,在该⽅法中体⽤菜单类中MeasureItem⽅法22.屏蔽message_map 23.析构函数中添加程序m_ImageList.Detach();。
VC对话框的工具栏添加图标
m_toolbar.SetSizes(CSize(105,60),CSize(28,40));//设置按钮大小
m_toolbar.EnableToolTips(TRUE);//激活提示信息
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
return TRUE;
}
return FALSE;
}
5.在字串表中创建相应ID的字串;
ScreenToClient(rcChild);
rcChild.OffsetRect(ptOffset);
pwndChild->MoveWindow(rcChild,FALSE);
pwndChild=pwndChild->GetNextWindow();
}
//调整对话框尺寸
CRect rcWindow;
GetWindowRect(rcWindow);
rcWindow.right+=rect.Width()-rectNow.Width();
rcWindow.bottom+=rect.Height()-rectNow.Height();
MoveWindow(rcWindow, FALSE);
//控件条定位
// if there is a top level routing frame then let it handle the message
VC中对话框使用技巧集合
注:以下代码以一个名为CTest6Dlg的对话框类为例--------------------------------------------------------------------------------1. 在任务栏隐藏对话框ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);--------------------------------------------------------------------------------2. 使对话框为顶层窗口SetWindowPos(&this->wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);--------------------------------------------------------------------------------3. 在运行时添加最大化,最小化按钮SetWindowLong(this->m_hWnd, GWL_ST YLE,GetWindowLong(this->m_hWnd, GWL_ST YLE) |WS_MINIM IZEBOX | WS_MAXIMIZEBOX);UpdateWindow();--------------------------------------------------------------------------------4. 使能对话框右上角关闭按钮在OnInitDialog中方法一:CMenu* menu = GetSystemMenu(FALSE);menu->Modify M enu(SC_CLOSE, MF_BYCOMMAND | M F_GRAYED );方法二:CMenu* menu = GetSystemMenu(FALSE);menu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);--------------------------------------------------------------------------------5. 当对话框一部分在屏幕外时,显示全部对话框SendMessage(DM_REPOSITION);--------------------------------------------------------------------------------6. 改变鼠标外形添加WM_SETCURSOR 消息映射函数BOOL CTest6Dlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) {SetCursor(AfxGetApp()->LoadStandardCursor(IDC_HELP));return 0;}--------------------------------------------------------------------------------7. 改变对话框背景色和文本颜色在CTest6App的InitInstance中添加SetDialogBkColor(RGB(255,0,0), RGB(0,255,0));--------------------------------------------------------------------------------8. 改变对话框caption上的图标导入自己的图标资源到工程中,把原来ID为IDR_MAINFRAME 的资源删除,把新的图标的ID命名为IDR_MAINFRAME --------------------------------------------------------------------------------9. 在主对话框显示前,显示一个login对话框BOOL CTest6App::InitInstance(){//...int nResponse;CLoginDlg loginDlg;nResponse = loginDlg.DoModal();if (nResponse == IDOK){}if (nResponse == IDCANCEL){return FALSE;}CTest6Dlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse == IDOK ){}else if (nResponse == IDCANCEL){}return FALSE;}然后重载CLoginDlg对话框的哦OnOK(),在其中判断条件void CLoginDlg::OnOK(){if (条件满足)CDialog::OnOK();elseAfxMessageBox(_T("invalid password!"));}--------------------------------------------------------------------------------10. 在对话框中添加工具栏方法一:添加以下代码到OnInitDialog 中if ( !m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_TOOLBAR1) ){TRACE0("Failed to Create Dialog Toolbar\n");EndDialog(IDCANCEL);}CRect rcClientOld; // 久客户区RECTCRect rcClientNew; // 加入TOOLBAR后的CLIENT RECTGetClientRect(rcClientOld); //// Called to reposition and resize control bars in the client area of a window// The reposQuery FLAG does not really traw the Toolbar. It only does the calculations.// And puts the new ClientRect v alues in rcClientNew so we can do the rest of the Math.//重新计算RECT大小RepositionBars(AFX_IDW_CONT ROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rcClientNew);// All of the Child Windows (Controls) now need to be moved so the Tollbar does not cov er them up. //所有的子窗口将被移动,以免被TOOLBAR覆盖// Offest to move all child controls after adding Tollbar//计算移动的距离CPoint ptOffset(rcClientNew.left-rcClientOld.left,rcClientNew.top-rcClientOld.top);CRect rcChild;CWnd* pwndChild = GetWindow(GW_CHILD); //得到子窗口while(pwndChild) // 处理所有子窗口{//移动所有子窗口pwndChild->GetWindowRect(rcChild);ScreenToClient(rcChild);rcChild.OffsetRect(ptOffset);pwndChild->MoveWindow(rcChild,FALSE);pwndChild = pwndChild->GetNextWindow();}CRect rcWindow;GetWindow Rect(rcWindow); // 得到对话框RECTrcWindow.right += rcClientOld.Width() - rcClientNew.Width(); // 修改对话框尺寸rcWindow.bottom += rcClientOld.Height() - rcClientNew.Height();Mov eWindow(rcWindow,FALSE); // Redraw WindowRepositionBars(AFX_IDW_CONT ROLBAR_FIRST,AFX_IDW_CONT ROLBAR_LAST,0);方法二:/dialog/dlgtoolstatusbar.asp--------------------------------------------------------------------------------11.响应对话框的最大化、最小化、关闭、恢复事件方法一:添加WM_SYSCOMMAND 消息映射函数v oid CTest6Dlg::OnSysCommand(UINT nID, LPARAM lParam) {if ( (nID & 0xFFF0) == IDM_ABOUTBOX ){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{if ( nID == SC_MAXIMIZE ){AfxMessageBox(_T("最大化"));}else if ( nID == SC_MINIMIZE ){AfxMessageBox(_T("最小化"));}else if ( nID == SC_CLOSE ){AfxMessageBox(_T("关闭"));}CDialog::OnSysCommand(nID, lParam);}方法二:添加WM_SIZE 消息映射函数v oid CTest6Dlg::OnSize(UINT nT y pe, int cx, int cy){CDialog::OnSize(nT y pe, cx, cy);if ( nT y pe == SIZE_MAXIM IZED ){AfxMessageBox(_T("最大化"));}else if ( nT ype == SIZE_MINIMIZED ){AfxMessageBox(_T("最小化"));}else if ( nT ype == SIZE_RESTORED ){AfxMessageBox(_T("恢复"));}}--------------------------------------------------------------------------------12.代码实现窗口最小化,最大化,关闭PostMessage(WM_SYSCOMMAND, SC_MINIMIZE);PostMessage(WM_SYSCOMMAND, SC_MAXIMIZE);PostMessage(WM_SYSCOMMAND, SC_CLOSE);--------------------------------------------------------------------------------13.按下ESC和ENTER键时禁止关闭对话框方法一:(1) 重载OnCancel和OnOk,屏蔽其中的CDialog::OnCancel()和CDialog::OnOk();(2) 添加以下代码v oid CTest6Dlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout; //if you have an about dialogdlgAbout.DoModal();}else if ((nID & 0xFFF0) == SC_CLOSE){//用户点击右上角"X"EndDialog(IDOK);}else{CDialog::OnSysCommand(nID, lParam);}}方法二:BOOL CTest6Dlg::PreTranslateMessage(MSG* pM sg){if ( pMsg->message == WM_KEYDOWN ){switch(pMsg->wParam){case VK_ESCAPE:return T RUE; //直接返回TRUEbreak;case VK_RET URN:return T RUE;break;}}return CDialog::PreTranslateMessage(pM sg);}方法三:Q122489:How to Disable Default Pushbutton Handling for MFC Dialog/kb/122489/en-us--------------------------------------------------------------------------------14.在对话框中处理键盘鼠标消息处理PreTranslateMessage消息以下代码示例只演示了键盘WM_KEYDOWN消息,你也可以处理鼠标消息,比如WM_LBUTTONDOWN,WM_LBUTTONUP,WM_RBUTTONDOWN等。
vc++菜单全集
在系统菜单中添加菜单项(一)本文介绍如何向系统菜单中添加自己的菜单项,如下:1.创建一个基于对话框的工程:AddMenuToSysMenu。
2.在对话框类中添加一个成员函数:CMenu* m_pMenu;用来添加自己的菜单项。
3.在resouce.h中定义#define IDI_PECULIARMENU1201来代表自己要添加的菜单项资源。
4.在OnInitDialog中添加如下代码:m_pMenu = GetSystemMenu(FALSE);m_pMenu->AppendMenu(MF_STRING,IDI_PECULIARMENU,"系统菜单");5.在OnSysCommand中添加如下代码相应自己的消息。
elseif(nID == IDI_PECULIARMENU){MessageBox("系统菜单"," 提示",MB_OK|MB_ICONINFORMATION);}注:1.改变标题栏菜单图标如下:m_hIcon = AfxGetApp()->LoadIcon(IDI_MAINMENU);2.用位图填充对话框如下:在OnPaint中添加如下代码:CDC *pDC = this->GetDC();CDC m_Menu;m_Menu.CreateCompatibleDC(pDC);CBitmap m_bitmap;m_bitmap.LoadBitmap(IDB_MAIN);m_Menu.SelectObject(&m_bitmap);CRect m_rect;pDC->BitBlt(0,0,800,700,&m_Menu,0,0,SRCCOPY);m_bitmap.DeleteObject();pDC->DeleteDC();带图标的程序菜单(二)本文介绍在基于单文档程序中,如何实现带图标的程序菜单。
给对话框添加菜单工具栏状态栏简易方法
给对话框添加菜单工具栏状态栏简易方法给对话框添加菜单工具栏状态栏简易方法DLGCBR32 示例:演示如何向对话框添加状态栏和工具栏给对话框添加菜单工具栏状态栏简易方法收藏VC++6.0MFC中为对话框添加工具栏VC++6.0 VS2008给图标工具栏添加响应函数VC++6.0 VS2008给图标工具栏添加响应函数1、在对话框的:OnInitDialog()函数中添加以下红色代码:BOOL CGSM_MessageDlg::OnInitDialog(){CDialog::OnInitDialog();// 设置此对话框的图标。
当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIcon, FALSE); // 设置小图标// TODO: 在此添加额外的初始化代码//创建图像列表m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);//向图像列表中添加图标m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONBOOK));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONNOTE));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONSEND));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONRECV));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONSET));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONUSER));UINT array[8];for(int i=0;i<8;i++){if(i==2 || i==5)array[i] = ID_SEPARATOR; //第、个按钮为分隔条elsearray[i] = i+1001; //为工具栏按钮设置索引}m_T oolBar.Create(this);m_T oolBar.SetButtons(array,8);//关联图像列表m_T oolBar.GetT oolBarCtrl().SetImageList(&m_ImageList);m_T oolBar.SetSizes(CSize(50,60),CSize(32,32)); //设置按钮和图标的大小m_T oolBar.SetButtonText(0,L"电话簿管理");m_T oolBar.SetButtonText(1,L"常用语管理");m_T oolBar.SetButtonText(3,L"短信息发送");m_T oolBar.SetButtonText(4,L"短信息接收");m_T oolBar.SetButtonText(6,L"短信猫设置");m_T oolBar.SetButtonText(7,L"操作员管理");RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CO NTROLBAR_LAST,0);return TRUE; // 除非将焦点设置到控件,否则返回TRUE}2、从代码中的“array[i] = i+1001; //为工具栏按钮设置索引”可以看出,工具栏图标的地址是1001开始的。
VC++添加菜单并读写ini文件数据
VC++添加菜单并读写ini文件数据1、打开VC++6.0,选择新建。
2、选择“工程”,选择“MFC AppWizard(exe)”,选择工程所建立的位置,并输入工程名。
单击“确定”。
3、在弹出的对话框中选择“基本对话框(D)”,点击“下一步”。
4、在弹出的想到对话框中取消“‘关于’对话框”(可省略该步)。
点击“完成”。
5、在弹出的对话框中直接点击“确定”。
6、在“ResourceView”标签下,在“Testresources”上单击右键,再弹出菜单中选择“插入”。
7、在弹出对话框中选择“Menu”,并点击“新建”。
8、弹出下面的对话框,选择“Menu”,并选中所要编辑的菜单,这里是“IDR_MENU”,在右边的编辑区编辑菜单。
9、双击菜单区中白色方框,弹出“菜单项目属性”对话框,在“标明”框中输入要显示的菜单项。
这里随便输入一个,说明操作方法和效果。
我们输入“文件(&W)”,括号内表示快捷键。
10、在“文件”菜单出现之后,其下面会再有一个白色框的空白区域,表示下拉菜单。
双击,出现“菜单项目属性”对话框,输入“ID”(必须)和“标明”,我们在“标明”中输入“操作ini\t(Ctrl+A)”,“操作ini”表示要显示的菜单项,“(Ctrl+A)”表示快捷键,“\t”会将所有下拉菜单的快捷键自动对齐。
11、还可以选择“分隔符”,在前面的小方框内打勾,会出现一个分隔符。
12、按照上述方法设计好菜单。
13、将所设计的菜单加入对话框。
在“TestDlg.cpp”的OnInitDialog函数中中加入下面代码:CMenu m_menu;m_menu.LoadMenu(IDR_MENU1);SetMenu(&m_menu);如下图所示:14、运行程序,看是否有误,如果无误,会出现下图所以的结果。
15、在“ResourceView”标签下,在“Dialog”上单击右键,再弹出菜单中选择“插入Dialog”。
VC对话框程序添加目录菜单、工具条和状态栏
VC对话框程序添加目录菜单、工具条和状态栏为<对话框>添加工具条和状态栏前,先说说添加目录菜单栏;1,在Insert下拉菜单中选择Resorce,新建一个MENU,2,在CDialog::OnInitDialog();后面添加代码:CMenu menu;menu.LoadMenu(IDR_MENU1); // 红色部分为你新建MENU的ID索引SetMenu(&menu);为对话框程序添加工具条和状态栏摘要:本文介绍了在对话框程序基础上通过程序控制来动态添加工具条和状态条的实现过程和方法。
一、引言对于不需要文档/视图结构支持的程序一般都采用对话框做为程序的基础框架。
虽然在对话框程序上可以通过修改其属性来添加系统菜单,但对比SDI和MDI程序的工具条和状态栏未免使界面显得简单、单调。
虽然在Visual Basic 中提供有独立的工具条和状态栏标准控件可以直接在对话框上使用,但Visual C++ 6.0所提供的26种基本Windows标准控件却没有将它们包含其中。
因此要在对话框程序中实现工具条和状态栏只能通过编程来动态实现。
二、工具条的实现过程MFC对于工具条和状态栏分别提供了CToolBar和CStatusBar两个基本类库,但由于在实现时MFC 对其做了过多的封装,以至无法了解内部的一些核心技术。
因此本文在实现过程中放弃了相对比较方便的CToolBar和CStatusBar类的使用,而是通过SDK(Software Developers Kit,软件开发工具箱)式的WinAPI 应用程序接口来实现的。
在API函数中经常需要用到对话框的窗口句柄和当前的实例句柄,在SDK程序设计中以上两个句柄可以直接从入口函数WinMain()中引出,而在MFC下也对其做了封装,不能直接获取。
但MFC也为其留有接口:CWnd窗口类提供的GetSafeHwnd()可以返回对话框的窗口句柄;函数AfxGetInstanceHandle()则可以获取当前应用程序的实例句柄。
VC对话框添加右键菜单
VC对话框添加右键菜单VC对话框添加右键菜单(2008-12-21 10:15:24)标签:it 分类:VC++学习实例及资料VC对话框添加右键菜单2006-12-05 22:34一.在资源创建对话框中选择Menu项并单击New按钮自动创建ID为IDR_MENU1的菜单,为该菜单添加一个菜单项File,并在File 菜单项下添加Cut,Copy和Paste三个菜单(为这三个菜单添加消息响应代码)如:void CExampleDlg::OnCut(){AfxMessageBox("Cut"); //弹出对话框}void CExampleDlg::OnCopy(){AfxMessageBox("Copy"); //弹出对话框}void CExampleDlg::OnPaste(){AfxMessageBox("Paste"); //弹出对话框}二.当在窗口内右击时,窗口将接收到WM_CONTEXTMENU消息,在该消息的处理函数中装载右键菜单,并调用CMenu::TrackPopupMenu函数便可显示右键菜单,添加对话框WM_CONTEXTMENU消息处理函数的响应代码如下:void CExampleDlg::OnContextMenu(CWnd* pWnd, CPoint point){CMenu menu;menu.LoadMenu(IDR_MENU1); //读取资源menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN| TPM_LEFTBUTTON|TPM_RIGHTBUTTON, point.x, point.y, this) //弹出自定义右键菜单}<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<在mousemove中使用if(rect.PtInRect(point))MessageBox("hi");不起作用,即使鼠标落入有效区域。
VC++单文档工程点击菜单弹出相应对话框--总结笔记
VC++单文档工程点击菜单弹出相应对话框
1、“资源视图-> Dialog”右键选择“添加资源”,在弹出的对话框中选择“Dialog ->新建”,创建新的对话框;
2、右键点击对话框,选择“属性”,为新的对话框指定一个ID和Caption(此步骤可省略,使用默认值);
3、右键点击对话框,选择“添加类”,为新的对话框添加相应的类,完成后会生成“xxx.h”和“xxx.cpp”两个文件;
4、“资源视图->Menu”,选择要使用的菜单,双击打开,在需要添加菜单的地方点击右键选择“新插入”,插入一个新的菜单以及具体菜单项。
5、右键点击具体菜单项,选择“属性”,为其指定一个ID(此步骤可省略,使用默认值);右键点击具体菜单项,选择“添加事件处理程序”,为其添加事件处理程序,并为其选择一个类,一般选择“CxxxView”。
6、在生成的事件处理函数中,添加以下代码
(1)DoModal
(2)Create、ShowWindow
以上两种方法在每次点击时都会生成新的对话框,不能保留对话框中输入的数据等信息。
(3)在主框架中实现。
Visual C++向对话框类中添加工具栏
Visual C++向对话框类中添加工具栏默认分类2010-07-15 16:26:08 阅读88 评论0 字号:大中小摘要:Visual C++向对话框类中添加工具栏在文档/视图结构中,添加工具栏是非常方便的,但在基于对话框的应用程序中,就稍稍复杂一点了。
通常情况下,向对话框中添加工具栏有两种方法。
向对话框类中添加工具栏在文档/视图结构中,添加工具栏是非常方便的,但在基于对话框的应用程序中,就稍稍复杂一点了。
通常情况下,向对话框中添加工具栏有两种方法。
第一种方法:特点:①使用CToolBar类,可以装载工具栏资源。
②代码编写简单方便。
缺点:只支持16位图标。
步骤:(1)通过AppWizard新建一个基于对话框的项目Main。
(2)在对话框资源中单击鼠标右键,在弹出的快捷菜单上选择“Properties”菜单项,打开“Dialog Properties”对话框。
(3)在“Dialog Properties”对话框中将“Caption”文本框的内容改为“在对话框中添加工具栏(16位图标)”。
(4)通过工具栏设计器创建一个工具栏资源ID_TOOLBAR1,并画好各工具按钮,如图1所示。
图1 工具栏资源设计结果(5)在对话框类CMain中添加一个成员变量CToolBar m_ToolBar。
(6)在对话框的OnInitDialog()成员函数中添入以下代码:BOOL CDMain::OnInitDialog(){CDialog::OnInitDialog();if (!m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FL YBY | CBRS_SIZE_DYNAMIC) ||!m_ToolBar.LoadToolBar(IDR_TOOLBAR)){TRACE0("Failed to create toolbar\n");return -1; // fail to create}RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); m_ToolBar.ShowWindow(SW_SHOW);// return true;}(7)按Ctrl+F5运行程序,结果如图2所示。
VC对话框的工具栏添加图标-推荐下载
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{ // idFrom is actually the HWND of the tool nID = ::GetDlgCtrlID((HWND)nID);
VC 对话框的工具栏添加图标,文字,提示信息
(2: MFC 编程学习
杂谈
OnInitDialog()中
//先导入图标文件,假设有 5 个工具栏按钮 m_imagelist.Create(24,24,ILC_COLOR24|ILC_MASK,1,1);//创建按图像列表 m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_Find));//将图像与列表一一关联 m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_Look)); ......
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术通关,1系电过,力管根保线据护敷生高设产中技工资术艺料0不高试仅中卷可资配以料置解试技决卷术吊要是顶求指层,机配对组置电在不气进规设行范备继高进电中行保资空护料载高试与中卷带资问负料题荷试2下卷2,高总而中体且资配可料置保试时障卷,各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并22工且22作尽22下可22都能22可地护以缩1关正小于常故管工障路作高高;中中对资资于料料继试试电卷卷保破连护坏接进范管行围口整,处核或理对者高定对中值某资,些料审异试核常卷与高弯校中扁对资度图料固纸试定,卷盒编工位写况置复进.杂行保设自护备动层与处防装理腐置,跨高尤接中其地资要线料避弯试免曲卷错半调误径试高标方中高案资等,料,编试要5写、卷求重电保技要气护术设设装交备备置底4高调、动。中试电作管资高气,线料中课并敷3试资件且、设卷料中拒管技试试调绝路术验卷试动敷中方技作设包案术,技含以来术线及避槽系免、统不管启必架动要等方高多案中项;资方对料式整试,套卷为启突解动然决过停高程机中中。语高因文中此电资,气料电课试力件卷高中电中管气资壁设料薄备试、进卷接行保口调护不试装严工置等作调问并试题且技,进术合行,理过要利关求用运电管行力线高保敷中护设资装技料置术试做。卷到线技准缆术确敷指灵设导活原。。则对对:于于在调差分试动线过保盒程护处中装,高置当中高不资中同料资电试料压卷试回技卷路术调交问试叉题技时,术,作是应为指采调发用试电金人机属员一隔,变板需压进要器行在组隔事在开前发处掌生理握内;图部同纸故一资障线料时槽、,内设需,备要强制进电造行回厂外路家部须出电同具源时高高切中中断资资习料料题试试电卷卷源试切,验除线报从缆告而敷与采设相用完关高毕技中,术资要资料进料试行,卷检并主查且要和了保检解护测现装处场置理设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
动态添加菜单项、子菜单、右键菜单 VC
动态添加菜单项、子菜单、右键菜单VC动态添加菜单项、子菜单、右键菜单(VC)2010-06-27 16:56如何动态添加菜单/菜单项、子菜单、右键菜单有关菜单的操作主要用到CMenu类,当然也可用相应API函数,CMenu类只是MFC对API中操作菜单的函数的封装而已。
不过能用类就尽量用类,类的组织方式好呗,代码看着也舒服。
若是SDK编程,那就用API吧。
CMenu menuMain,menu1;//首先定义CMenu对象一、创建菜单,有两种方法1.用LoadMenu函数从资源加载menuMain.LoadMenu(IDR_MAINFRAME);//从资源加载,这里使用SDI的主菜单资源2.用CreateMenu函数创建menu1.CreateMenu();//创建菜单,还没有菜单项二、添加菜单项,可用AppendMenu()在菜单的最后加、InsertMenu()在指定的位置加.//ID_TEST1在Resource.h中定义,随便给个整数值,不要和已有的重复就行了menu1.AppendMenu(MF_STRING,ID_TEST1,"Test1");//第一项菜单项menu1.AppendMenu(MF_STRING,ID_TEST2,"Test2");//第二项菜单项menu1.InsertMenu(1,MF_BYPOSITION|MF_STRING,(UINT)ID_TEST1,"ID_TEST1");//在第二项菜单项前添加新菜单项三、添加子菜单同样用AppendMenu()、InsertMenu()函数。
不过要注意参数的设置。
menu1.AppendMenu(MF_BYPOSITION|MF_POPUP|MF_STRING,(UINT)menuMain.GetSubMenu(0)-m_hMenu,"子菜单");//第二个参数是菜单的句柄HMENU四、删除菜单用DeleteMenu()、RemoveMenu()函数来删除指定位置的菜单/菜单项。
vc_5菜单和工具条
if(!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP|C BRS_GRIPPER|CBRS_FLYBY|CBRS_SIZE_DY NAMIC) ||!m_wndToolBar.LoadToolBar(IDR_TOOLBAR1)) {TRACE0("Failed to create toolbar\n"); return -1; } RepositionBars(AFX_IDW_CONTROLBAR_FIR ST,AFX_IDW_CONTROLBAR_LAST,0);
工具条执行的功能往往已由相应的菜单实现 了。因此,一般情况下,没有必要为工具栏 设置消息响应函数,而只需为工具条上的按 钮指定正确的ID(按钮要响应函数的菜单调用 者的ID)来保证响应函数的正确调用。
1.创建工具条。 Resource View->右击顶层文件夹->Insert>Toolbar->new 2. 编辑工具栏按钮
void CMenuDlg::OnContextMenu(CWnd* pWnd, CPoint point) { // TODO: Add your message handler code here CMenu menu; menu.LoadMenu(IDR_QUICKMENU); CMenu *pquickmenu= menu.GetSubMenu(0); pquickmenu->TrackPopupMenu (TPM_LEFTALIGN|TPM_RIGHTBUTTON,poi nt.x,point.y,pWnd); }
1.在工程中插入新的菜单
在Workspace的“Resource View”中右击顶层文件夹, 在激活的快捷菜单中选择 “Insert”选项,在弹出对 话框中选“Menu”,单击New 按钮。
在VC对话框应用程序窗口添加状态栏的方法
在VC对话框应用程序窗口添加状态栏的方法
车光宏
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2009(000)023
【摘要】VC的应用程序向导不在对话框类型的应用程序主窗口中自动添加状态栏,但程序员可以通过编码来为对话框类型的应用程序主窗口添加状态栏.在此介绍两种具体的实现方法:即使用MFC类库中提供的CStatusBar类实现的方法和使用Win32 ApI函数实现的方法.
【总页数】3页(P28-30)
【作者】车光宏
【作者单位】(Missing)
【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于VC++的对话框编程中UpdateData函数的应用 [J], 陈致远;骆刚
2.VC++6.0对话框资源复用的方法 [J], 陈斌
3.在VC 6.0对话框应用程序中实现打印和打印预览 [J], 谌章义;李华贵;颜廷秦
4.VC++6.0在对话框最小化与提示条设计中的应用分析 [J], 汪旭冉
5.VC++语言中增强对话框功能的方法 [J], 闵玉瑾;张法全
因版权原因,仅展示原文概要,查看原文内容请购买。
VC++“成员变量,菜单项,新建对话框应用”
1
第一步 建立单文档应用程序,设置菜单项
2
第二步. 插入新的对话框,放置静态文本框和编辑框控件
3
第三步,将新插入的对话框和菜单选项关联起来
3.1 创建一个新的对话框类
3.2 利用类向导为菜单选项添加消息映射函数
4
5
3.3 在映射函数中添加2行代码,并把新建类的头文件包含在内
6
3.4 编译试运行,可弹出对话框
第四步设置对话框中5个编辑框控件的成员变量
4.1 设置整型变量 4.2 设置完毕,控件和成员变量建立了对应关系
7
4.3 给对话框中的按钮控件添加3行代码
8
9
第五步 编译,运行
Done!
多练习几遍,熟能生巧!。
VC++之对话框中添加工具栏
VC++之对话框中添加工具栏1、添加工具栏资源ID为IDR_TOOLBAR2、在对话框的类定义中加:CToolBar m_ToolBar;3、在OnInitDialog中或其它合适的消息响应中加如下代码:(函数可查看MSDN)01 m_ToolBar.Create(this); //创建工具栏02 m_ToolBar.LoadToolBar(IDR_TOOLBAR);//加载工具栏0304 //得出控件条大小.05 CRect rect;06 CRect rectNow;7GetClientRect(rect);0 8 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rectNow);0910 //放置控件条位置11 CPoint ptOffset(rectNow.left-rect.left,rectNow.top-rect.top);1213 CRect rcChild;14 CWnd* pwndChild=GetWindow(GW_CHILD);15 while (pwndChild)16 {17 pwndChild->GetWindowRect(rcChild);18 ScreenToClient(rcChild);19 rcChild.OffsetRect(ptOffset);20 pwndChild->MoveWindow(rcChild,FALSE);21 pwndChild=pwndChild->GetNextWindow();22 }2324 //调整对话框尺寸25 CRect rcWindow;26 GetWindowRect(rcWindow);27 rcWindow.right+=rect.Width()-rectNow.Width();28 rcWindow.bottom+=rect.Height()-rectNow.Height();29 MoveWindow(rcWindow, FALSE);3031//控件条定位3 2RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST, 0);3334 //对框居中35 CenterWindow();4、手工添加处理函数1 afx_msg void OnBtnXXX();//消息响应函数声明2 ON_COMMAND(ID_BTN_XXX/*工具按钮ID*/,OnBtnXXX/*函数名*/)//消息映射3 void CXXXDlg::OnBtnXXX(){}//消息处理函数。
VC++对话框的应用程序的菜单操作
VC++对话框的应用程序的菜单操作对话框的应用程序的菜单操作一、课程设计的功能:在一个基于对话框的应用程序中增加一个菜单资源,并把它连接到对话框窗口中,运行时显示出来。
完成以后的程序其运行界面如图1所示。
应用程序的标题为Application of Dialog based。
其主窗口中有三个按钮,它们分别为“时间”、“显示”和“退出”,以及两个“文件”和“帮助”的菜单栏。
单击“文件”菜单,出现一个下拉菜单,选择“时间”菜单,可以看到显示当前系统时间的消息框;单击菜单中的“显示”选项,则弹出一个显示基本信息的消息框;选择“退出”菜单,退出本应用程序。
单击相应的按钮完成同样的效果。
若单击“帮助”菜单,出现一个“关于应用程序”菜单项。
图1 Ex4_2程序主窗口二、课程的设计步骤1使用AppWizard创建一个对话框MFC应用程序(2)在Visual C++主菜单栏中选择File菜单中的New选项,打开New对话框。
(3)选择Project标签页,并在该标签页中选择MFC AppWizard应用程序向导,在Project name编辑框中输入工程文件名为Ex4_2,单击“OK”按钮。
(4)在MFC AppWizard-Step1对话框中,选择Dialog based选项,在MFCAppWizard-Step 2 of 4对话框中,在Please enter a title for your dialog 编辑框中给应用程序主窗口标题命名为“Application of Dialog based”。
单击“Finish”完成应用程序框架文件的创建。
2编辑对话框(1)选择项目工作区的ResourceView面板,(2) 切换到资源视图。
展开Dialog对话框资源类型。
双击IDD_EX4_2_DIALOG菜单资(3) 将弹出对话框编辑窗口和一个控件工具栏面板如下图所示。
图2 初始对话框编辑窗口控件工具栏面板列出了VC中所可以建立的控件类型,用户只要把鼠标停在某个控件标识上,可显示该控件的类型提示。
用VC++定制通用对话框
用VC++定制通用对话框对话框概述一个通用对话框是由Windows设计和编写的,用于完成某一特定工作,比如打开一个文件或选择一种颜色等。
MFC提供了管理每一通用对话框类型的类,这些类概括在下表中。
表1例如:处理File菜单上Open和Save As命令时使用CFileDialog通用对话框,而处理Prin和Print Setup命令时则使用CPrintDialog通用对话框。
用这些对话框构造用户应用是很方便的,但有时这些通用对话框的外部特性和行为不能满足用户要求,特别是在对话框上需要增加某些控件或删除某些控件时尤为突出。
本文提供给大家一种方法来定制通用对话框的外部特性和行为,可用自己的代码与MFC提供的类协同处理这些对话框,以满足用户的不同要求。
一方面由于使用了MFC的通用对话框类,节省了大量的代码编程工作,提高了开发效率;另一方面,采用自己的代码协同实现,使对话框的功能可以做到灵活多样。
本文以F ile Open命令为例,来阐述这一方法。
定制File Open通用对话框CFileDialog类封装Windows公共文件对话框。
公共文件对话框以一种与Windows标准一致的方式,提供了实现File Open和File Save A s对话框(及其他文件选择对话框)的简单方法。
CFileDialog中有一成员变量m_ofn,它是OPENFILENAME类型的结构。
通常,要使用一个F ileDialog对象,需要首先用CFileDialog的构造函数创建该对象。
在对话框被构造之后,且在用DoModal成员函数显示对话框之前,应用程序可以通过设置m_ofn结构中的值,来对此对话框中的控件的值或状态进行初始化。
例如:应用程序可将m_ofn的lpsz Title成员设置为所想要的对话框标题;可将m_ofn的指定该对话框的创建标志Flags成员设置为其各标志位值的多种组合,以达到一定要求,其中,设置的Flags中的OFN—ALLOWMULTISELECT标志可允许用户选择多个文件;设置OFN_HIDEREADONLY标志可隐藏Read Only检查框;设置O FN_OVERWRITEPROMT标志可做到若所选择的文件已存在,则使Save As对话框产生一个消息框,使用户确认是否重写该文件;等等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
stLogFont.lfFaceName, dwFontColor, stCF.iPointSize); MessageBox(szBuffer, "执行结果", MB_OK); } -----------------------------------------------------------------------------(5)颜色 -----------------------------------------------------------------------------源代码 CHOOSECOLOR stCC; COLORREF dwBackColor = RGB(0, 0, 0); COLORREF dwCustColors[16];
1.1 获取文件路径名: char szFileName[MAX_PATH] = "";//必须初始化
stOF.lpstrFile = szFileName; stOF.nMaxFile = MAX_PATH;// 必须和上面一起
1.2 标志: OFN_ALLOWMULTISELECT –允许选择多个文件名
wsprintf(szBuffer, "您选择的打印机:%s", GlobalLock(stPS.hDevMode)); MessageBox(szBuffer,"执行结果", MB_OK); }
-----------------------------------------------------------------------------(4)字体 -----------------------------------------------------------------------------源代码
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)) {
ቤተ መጻሕፍቲ ባይዱif (GetOpenFileName(&stOF) != NULL)
{
MessageBox(szFileName, "执行结果", MB_OK);
}
------------------------------------------------------------------------------
此时就可以了. 方法二: 不用方法一,直接添加代码完成上述功能. 添加代码到 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); 此时结果如下图
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) {
源程序:
char szFileName[MAX_PATH] = "";
OPENFILENAME stOF;
//必须的
RtlZeroMemory(&stOF,sizeof(stOF));//必须的
stOF.lStructSize = sizeof(stOF); //必须的
stOF.hwndOwner = NULL;
(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) {
VC++对话框程序中添加菜单 在 VC 中创建一个基于对话框的 MFC 程序,要在其中添加菜单总共分三步:
1、首先插入一个菜单资源 IDR_MENU1,然后可以编辑修改菜单;
2、 然后在为对话框添加一个 CMenu 类型的成员变量 m_Menu;
3、在 OnInitDialog()中添加如下的代码:
stOF.lpstrFilter = "Text Files(*.txt)\0 *.txt\0 All Files";
stOF.lpstrFile = szFileName;
stOF.nMaxFile = MAX_PATH;
stOF.Flags = OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;
OFN_PATHMUSTEXIST -输入文件名时,路径必须存在
OFN_READONLY -对话框中的“以只读方式打开”复选框初始化的时候处于选中状态
------------------------------------------------------------------------------
m_Menu.LoadMenu(IDR_MENU1);//载入菜单
SetMenu(&m_Menu);
//显示菜单
经过这三步以后菜单就可以显示出来了。
MFC 对话框工程中添加菜单(VC++ 6.0 编译器)
MFC 对话框工程中添加菜单(VC++ 6.0 编译器) 第一步:创建对话框资源和菜单资源. 第二步:添加菜单到对话框中 方法一: 在创建的对话框中右键,在 Menu 选项选择自己的菜单 ID 如下图
最后在添加菜单到对话框类中,实现其各种功能. 下面是在上面的基础上实现的通用对话框空间的功能代码,方便以后开发使用. (1)打开文件对话框 条件: OPENFILENAME 结构体初始化
GetOpenFileName 函数调用
GetOpenFileName()通过 OPENFILENAME 这个结构体的大小来确定 windows 的版本的,初始化 这个结构体的大小是必须的. OPENFILENAME stOF 结构体必须清零.
dwBackColor = stCC.rgbResult; wsprintf(szBuffer, "您选择的颜色值:%08x", dwBackColor); MessageBox(szBuffer,"执行结果", MB_OK); }
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) {
OFN_CREATEPROMPT -如果输入不存在的文件名,对话框提问“是否建立文件”
OFN_FILEMUSTEXIST -只能选择一个已经存在的文件名,必须使用 OFN_PATHMUSTEXIST