dialog windowCDay7Dlg pWnd CDay7Dlg lparam// add the font name to the list boxpWnd -gtm_ctlFontList.AddStringlpelf -gtelfLogFont.lfFaceName// Return 1 to continue font enumerationreturn 1其中 m_ctlFontList 是一个列表控件变量只运行一个程序实例if FindWindowNULLquot程序标题quot exit0或 CreateMutx:HANDLE m_hMutex ::CreateMutexNULLtrue_TquotMBDquotifGetLastError ERROR_ALREADY_EXISTS ReleaseMutexm_hMutex ::MessageBoxNULL_Tquot应用程序已经运行quot_Tquot系统提示quotMB_OKMB_ICONSTOP return FALSE 也可以用 CreateThread,方法同 CreateMutex得到鼠标位置CPoint ptGetCursorPosamppt //得到位置显示和隐藏程序菜单CWnd pWndAfxGetMainWndifb_m //隐藏菜单pWnd-gtSetMenuNULLpWnd-gtDrawMenuBarb_mfalseelseCMenu menumenu.LoadMenuIDR_MAINFRAME ////显示菜单 也可改变菜单项pWnd-gtSetMenuampmenupWnd-gtDrawMenuBarb_mtruemenu.Detach获取可执行文件的图标HICON hIcon::ExtractIconAfxGetInstanceHandle_TquotNotePad.exequot0if hIcon ampamphIconHICON-1pDC-gtDrawIcon1010hIconDestroyIconhIcon窗口自动靠边程序演示BOOL AdjustPosCRect lpRect//自动靠边int iSXGetSystemMetricsSM_CXFULLSCREENint iSYGetSystemMetricsSM_CYFULLSCREENRECT rWorkAreaBOOL bResult SystemParametersInfoSPI_GETWORKAREA sizeofRECT amprWorkArea 0CRect rcWAifbResult//如果调用不成功就利用 GetSystemMetrics 获取屏幕面积rcWACRect00iSXiSYelsercWArWorkAreaint iXlpRect-gtleftint iYlpRect-gttopifiX lt rcWA.left DETASTEP ampamp iXrcWA.left//调整左//pWnd-gtSetWindowPosNULLrcWA.leftiY00SWP_NOSIZElpRect-gtOffsetRectrcWA.left-iX0AdjustPoslpRectreturn TRUEifiY lt rcWA.top DETASTEP ampamp iYrcWA.top//调整上//pWnd-gtSetWindowPosNULL iXrcWA.top00SWP_NOSIZElpRect-gtOffsetRect0rcWA.top-iYAdjustPoslpRectreturn TRUEifiX lpRect-gtWidth gt rcWA.right - DETASTEP ampamp iX rcWA.right-lpRect-gtWidth//调整右//pWnd-gtSetWindowPosNULL rcWA.right-rcW.WidthiY00SWP_NOSIZElpRect-gtOffsetRectrcWA.right-lpRect-gtright0AdjustPoslpRectreturn TRUEifiY lpRect-gtHeight gt rcWA.bottom - DETASTEP ampamp iY rcWA.bottom-lpRect-gtHeight//调整下//pWnd-gtSetWindowPosNULL iXrcWA.bottom-rcW.Height00SWP_NOSIZElpRect-gtOffsetRect0rcWA.bottom-lpRect-gtbottomreturn TRUEreturn FALSE//然后在 ONMOVEING 事件中使用所下过程调用CRect rpRectAdjustPosamprpRectRECTr系统菜单添加菜单项给系统菜单添加一个菜单项需要进行下述三个步骤: .首先,使用 Resource Symbols 对话(在 View 菜单中选择 Resource Symbols..可以显示该对话)定义菜单项 ID,该 ID 应大于 0x0F 而小于 0xF000;其次,调用 CWnd::GetSystemMenu 获取系统菜单的指针并调用 CWnd:: Appendmenu 将菜单项添加到菜单中。
下例给系统菜单添加两个新的int CMainFrame:: OnCreate LPCREATESTRUCT lpCreateStruct…//Make sure system menu item is in the right range.ASSERT IDM_MYSYSITEM amp0xFFF0IDM_MYSYSITEMASSERT IDM-MYSYSITEMlt0xF000//Get pointer to system menu.CMenu pSysmenuGetSystemmenu FALSEASSERT_VALID pSysMenu//Add a separator and our menu item to system menu.CString StrMenuItem _T quotNew menu itemquotpSysMenu-gtAppendmenu MF_SEPARATORpSysMenu-gtAppendMenu MF_STRING IDM_MYSYSITEM strMenuitem…现在,选择系统菜单项时用户应进行检测。
使用 ClassWizard 处理 WM_SYSCOMMAND 消息并检测用户菜单的nID 参数:void CMainFrame:: OnSysCommand UINT nIDLPARAM lParam//Determine if our system menu item was selected.if nID amp 0xFFF0IDM_MYSYSITEM//TODO-process system menu itemelseCMDIFrameWnd ::OnSysCommand nID lParam最后,一个设计良好的 UI 应用程序应当在系统菜单项加亮时在状态条显示一个帮助信息,这可以通过增加一个包含系统菜单基 ID 的串表的入口来实现。
动态增加或删除菜单1、 增加菜单//添加CMenu mainmenumainmenuAfxGetMainWnd-gtGetMenu //得到主菜单mainmenu-gtGetSubMenu 0-gtAppendMenu MF_SEPARATOR//添加分隔符mainmenu-gtGetSubMenu 0-gtAppendMenuMF_STRINGID_APP_ABOUT_TquotAlways onampTopquot //添加新的菜单项DrawMenuBar //重画菜单2、 删除菜单//删除CMenu mainmenumainmenuAfxGetMainWnd-gtGetMenu //得到主菜单CString str forint imainmenu-gtGetSubMenu 0-gtGetMenuItemCount-1igt0i-- //取得菜单.
上一篇:
CsharpTCP_IP聊天室软件源码
下一篇:
高中生2016外国励志名言精选