VC常用操作源码汇总

发布时间 : 星期四 文章VC常用操作源码汇总更新完毕开始阅读

显示和隐藏程序菜单

CWnd *pWnd=AfxGetMainWnd(); if(b_m) //隐藏菜单 {

pWnd->SetMenu(NULL); pWnd->DrawMenuBar(); b_m=false; } else {

CMenu menu;

menu.LoadMenu(IDR_MAINFRAME); ////显示菜单 也可改变菜单项 pWnd->SetMenu(&menu); pWnd->DrawMenuBar(); b_m=true; menu.Detach(); }

获取可执行文件的图标

HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T(\ if (hIcon &&hIcon!=(HICON)-1) {

pDC->DrawIcon(10,10,hIcon); }

DestroyIcon(hIcon);

窗口自动靠边程序演示

BOOL AdjustPos(CRect* lpRect) {//自动靠边

int iSX=GetSystemMetrics(SM_CXFULLSCREEN); int iSY=GetSystemMetrics(SM_CYFULLSCREEN); RECT rWorkArea;

BOOL bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT), &rWorkAre a, 0);

3

CRect rcWA; if(!bResult)

{//如果调用不成功就利用GetSystemMetrics获取屏幕面积 rcWA=CRect(0,0,iSX,iSY); } else

rcWA=rWorkArea; int iX=lpRect->left; int iY=lpRect->top;

if(iX < rcWA.left + DETASTEP && iX!=rcWA.left) {//调整左

//pWnd->SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE); lpRect->OffsetRect(rcWA.left-iX,0); AdjustPos(lpRect); return TRUE; }

if(iY < rcWA.top + DETASTEP && iY!=rcWA.top) {//调整上

//pWnd->SetWindowPos(NULL ,iX,rcWA.top,0,0,SWP_NOSIZE); lpRect->OffsetRect(0,rcWA.top-iY); AdjustPos(lpRect); return TRUE; }

if(iX + lpRect->Width() > rcWA.right - DETASTEP && iX !=rcWA.right-lpRect->W idth()) {//调整右

//pWnd->SetWindowPos(NULL ,rcWA.right-rcW.Width(),iY,0,0,SWP_NOSIZE); lpRect->OffsetRect(rcWA.right-lpRect->right,0); AdjustPos(lpRect); return TRUE; }

if(iY + lpRect->Height() > rcWA.bottom - DETASTEP && iY !=rcWA.bottom-lpRect ->Height()) {//调整下

4

//pWnd->SetWindowPos(NULL ,iX,rcWA.bottom-rcW.Height(),0,0,SWP_NOSIZE); lpRect->OffsetRect(0,rcWA.bottom-lpRect->bottom); return TRUE; }

return FALSE; }

//然后在ONMOVEING事件中使用所下过程调用 CRect r=*pRect; AdjustPos(&r); *pRect=(RECT)r;

系统菜单添加菜单项

给系统菜单添加一个菜单项需要进行下述三个步骤:

首先,使用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 &0xFFF0)==IDM_MYSYSITEM) ASSERT (IDM-MYSYSITEM<0xF000) //Get pointer to system menu.

CMenu* pSysmenu=GetSystemmenu (FALSE) ASSERT_VALID (pSysMenu)

//Add a separator and our menu item to system menu. CString StrMenuItem (_T (\pSysMenu->Appendmenu (MF_SEPARATOR)

pSysMenu->AppendMenu (MF_STRING, IDM_MYSYSITEM, strMenuitem) … }

现在,选择系统菜单项时用户应进行检测。使用ClassWizard处理WM_SYSCOMMAND消息并检测用户菜单的nID参数:

5

void CMainFrame:: OnSysCommand (UINT nID,LPARAM lParam) {

//Determine if our system menu item was selected. if ( (nID & 0xFFF0)==IDM_MYSYSITEM) {

//TODO-process system menu item } else

CMDIFrameWnd ::OnSysCommand (nID, lParam) }

最后,一个设计良好的UI应用程序应当在系统菜单项加亮时在状态条显示一个帮助信息,这可以通过增加一个包含系统菜单基ID的串表的入口来实现。

动态增加或删除菜单

1、 增加菜单 //添加

CMenu *mainmenu;

mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单

(mainmenu->GetSubMenu (0))->AppendMenu (MF_SEPARATOR);//添加分隔符

(mainmenu->GetSubMenu (0))->AppendMenu(MF_STRING,ID_APP_ABOUT,_T(\ &Top\添加新的菜单项 DrawMenuBar(); //重画菜单 2、 删除菜单 //删除

CMenu *mainmenu;

mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单 CString str ;

for(int i=(mainmenu->GetSubMenu (0))->GetMenuItemCount()-1;i>=0;i--) //取得菜 单的项数。 {

(mainmenu->GetSubMenu (0))->GetMenuString(i,str,MF_BYPOSITION); //将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上。 if(str==\如果是刚才我们增加的菜单项,则删除。

6

联系合同范文客服:xxxxx#qq.com(#替换为@)