VC60实用小技巧.docx

上传人:b****2 文档编号:2236167 上传时间:2022-10-28 格式:DOCX 页数:19 大小:88.17KB
下载 相关 举报
VC60实用小技巧.docx_第1页
第1页 / 共19页
VC60实用小技巧.docx_第2页
第2页 / 共19页
VC60实用小技巧.docx_第3页
第3页 / 共19页
VC60实用小技巧.docx_第4页
第4页 / 共19页
VC60实用小技巧.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

VC60实用小技巧.docx

《VC60实用小技巧.docx》由会员分享,可在线阅读,更多相关《VC60实用小技巧.docx(19页珍藏版)》请在冰豆网上搜索。

VC60实用小技巧.docx

VC60实用小技巧

1.窗口最大最小化按纽的控制

①怎样在程序开始的时候让它最大化?

②vC做出来的exe文件在窗体的右上方是没有最大化和最小化按钮的,怎样实现这一功能?

③如何在显示窗口时,使最大化按钮变灰?

①在App类里的C…App:

:

InitInstance()中把m_pMainWnd->ShowWindow(SW_SHOW)改成m_pMainWnd->ShowWindow(SW_MAXIMIZE);

②在CreateWidnow时用WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX风格.

③第一种方法:

BOOLCMainFrame:

:

PreCreateWindow(CREATESTRUCT&cs)

{

if(!

CFrameWnd:

:

PreCreateWindow(cs))

returnFALSE;

//TODO:

ModifytheWindowclassorstylesherebymodifying

//theCREATESTRUCTcs

//disablethemaxminibox

cs.style&=~WS_MAXIMIZEBOX;

returnTRUE;

}

第二种方法:

CMenu*pMenu=AfxGetApp()->m_pMainWnd->GetSystemMenu(FALSE);

intx=pMenu->GetMenuItemCount();

UINTpID=pMenu->GetMenuItemID(x-1);

pMenu->EnableMenuItem(pID,MF_DISABLED);

第三种方法:

ModifyStyle(WS_MAXIMIZEBOX,0);

这个函数也可以是最大化按钮失效!

并且可以在程序中动态的改变窗口的风格

2.创建动态菜单

voidCMainFrame:

:

OnSelectState(NMTOOLBAR*pnmtb,LRESULT*plr)

{

CMenumenu;

if(!

menu.CreateMenu())

return;

menu.AppendMenu(MF_STRING,0,"开始");

menu.AppendMenu(MF_STRING,0,"结束");

CRectrc;

m_wndToolBar.SendMessage(TB_GETRECT,pnmtb->iItem,(LPARAM)&rc);

m_wndToolBar.ClientToScreen(&rc);

menu.TrackMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,

rc.left,rc.bottom,this,&rc);

//menu.DestroyMenu();

menu.detach();

}

3.如何禁止对话框关闭按钮和浮动工具条上的系统菜单

1、禁止对话框中的关闭按钮有二种方法。

第一种方法,用ModiftMenu()涵数来实现:

CMenu*pMenu=this->GetSystemMenu(FALSE);

pMenu->ModifyMenu(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED);

第二种方法,用EnableMenuItem()涵数来实现:

CMenu*pMenu=this->GetSystemMenu(FALSE);

pMenu->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED);

2、禁止浮动工具条上的系统菜单。

新建一个CToolBar的派生类CxxToolBar,在新类中的左键双击(CxxToolBar:

:

OnLButtonDblClk(...))

和左键单击(CxxToolBar:

:

OnLButtonDown(...))涵数中分别加入下面代码既可:

if(IsFloating())//工具条正在浮动状态中

{

CWnd*pMiniFrame;

CWnd*pDockBar;

pDockBar=GetParent();

pMiniFrame=pDockBar->GetParent();

//去除其上系统菜单

pMiniFrame->ModifyStyle(WS_SYSMENU,NULL);

//重绘工具条

pMiniFrame->ShowWindow(SW_HIDE);

pMiniFrame->ShowWindow(SW_SHOW);

}

3、禁止窗口最大化按钮

在PreCreateWindow()涵数中去掉WS_MAXIMIZEBOX风格显示既可。

BOOLCxxFrameWnd:

:

PreCreateWindow(CREATESTRUCT&cs)

{

cs.style&=~WS_MAXIMIZEBOX;

returnCFrameWnd:

:

PreCreateWindow(cs);

}

4.如何将标题栏上的右键菜单屏蔽掉?

[解决方法]

右键菜单是系统菜单,只要将其WS_SYSMENU的属性去掉即可.

[程序实现]

intCMainFrame:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)

{

........

longstyle=GetWindowLong(m_hWnd,GWL_STYLE);

style&=~WS_SYSMENU;

SetWindowLong(m_hWnd,GWL_STYLE,style);

return0;

}

5.修改标题栏高度

NONCLIENTMETRICSnm

调用SystemParametersInfo(SPI_GETNONCLIENTMETRICS,sizeof(nm),&nm,0)

重设SystemParametersInfo(SPI_SETNONCLIENTMETRICS,sizeof(nm),&nm,0)

6.窗口最大化、最小化及关闭的消息是什么?

如何截获?

最大化、最小化将发送WM_SYSCOMMAND消息。

要处理该消息,可以这么做:

1、在Form的头文件中添加:

void__fastcallRestrictMinimizeMaximize(TMessage&Msg);

BEGIN_MESSAGE_MAP

MESSAGE_HANDLER(WM_SYSCOMMAND,TMessage,RestrictMinimizeMaximize)

END_MESSAGE_MAP(TForm)

2、在Form的单元文件中添加:

void__fastcallTForm1:

:

RestrictMinimizeMaximize(TMessage&Msg)

{

if(Msg.WParam==SC_MINIMIZE)

{

//catchesminimize...

}

elseif(Msg.WParam==SC_MAXIMIZE)

{

//catchesmaximize...

}

TForm:

:

Dispatch(&Msg);

//or"elseTForm:

:

Dispatch(&Msg)"totrap

}

关闭窗口的消息为WM_CLOSE,CBuilder提供了OnClose事件。

7.如何改变窗口标题?

[问题提出]

在应用程序的不同运行时期,要反映当前状态往往会修改应用程序标题.

[解决方法]

在MFC类库中提供了CWnd:

:

SetWindowText函数,通过该函数可以改变任何窗体(包括控件)的标题.

改变主窗体的标题:

CWnd*m_pMainWnd;

m_pMainWnd=AfxGetMainWnd();

m_pMainWnd->SetWindowText(_T("改变标题"));

当改变多视MDI的子窗口的标题时,用:

GetParentFrame()->SetWindowText(_T("MDIChild改变标题"));

当改变按钮的标题时(假设按钮的ID=IDC_BUTTON1):

GetDlgItem(IDC_BUTTON1)->SetWindowText(_T("Button改变标题"));

运行看看.

8.如何用VC动态修改应用程序菜单

[问题提出]

本文将介绍一些使用CMenu的方法,如查找指定菜单,在指定选项前添加菜单项.....

[解决方法]

使用CWnd:

:

GetMenu()访问主菜单,GetMenu()返回指向CMenu对象的指针,它有一些成员函数,答应我们修改一个菜单。

1)如何实现找到一个菜单项:

步骤如下:

{

//动态修改菜单:

//GettheMainMenu

CMenu*pMainMenu=AfxGetMainWnd()->GetMenu();

CMenu*pSubMenu=NULL;

inti;

for(i=0;i<(int)pMainMenu->GetMenuItemCount();i)

{

pSubMenu=pMainMenu->GetSubMenu(i);

if(pSubMenu&&pSubMenu->GetMenuItemID(0)==ID_FILE_NEW)

break;

}

CStrings;

s.Format("%d",i);//菜单项的位数.

AfxMessageBox(s);

ASSERT(pSubMenu);

}

2)动态编辑菜单:

步骤如下(可以用上例的pSubMenu,要加的菜单你自己定义.):

1)添加一个称为Wzd2,命令ID为IDC_NAME_NEW1的菜单命令到该菜单中,可以用:

pSubMenu->AppendMenu(0,IDC_NAME_NEW1,"New&1");

2)在New1前插入New2,可以用:

pSubMenu->InsertMenu(IDC_NAME_NEW1,MF_BYCOMMAND,IDC_NAME_NEW2,"New&2");

3)把New1改变成New3,可以用:

pSubMenu->ModifyMenu(IDC_NAME_NEW1,MF_BYCOMMAND,IDC_NAME_NEW3,"New&3");

4)删除该菜单中第二项,可以用:

pSubMenu->RemoveMenu(1,MF_BYPOSITION);

9.屏蔽掉子框架的右上角的关闭按钮

intCChildFrame:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)

{

if(CMDIChildWnd:

:

OnCreate(lpCreateStruct)==-1)

return-1;

CMenu*pSysMenu=GetSystemMenu(FALSE);

pSysMenu->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);

return0;

}

10.隐藏标题栏和菜单栏

隐藏标题栏ModifyStyle(WS_CAPTION,0)

隐藏菜单栏SetMenu(NULL)

11.动态增加或删除菜单

1、增加菜单

添加

CMenu*mainmenu;

m

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1