VC6.0实用小技巧

发布时间 : 星期六 文章VC6.0实用小技巧更新完毕开始阅读

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

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

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

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

①在App类里的C…App::InitInstance()中把m_pMainWnd->ShowWindow(SW_SHOW)改成m_pMainWnd->ShowWindow(SW_MAXIMIZE);

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

③ 第一种方法:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {

if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE;

// TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs // disable the maxmini box cs.style &= ~WS_MAXIMIZEBOX; return TRUE; }

第二种方法:

CMenu *pMenu=AfxGetApp()->m_pMainWnd->GetSystemMenu(FALSE); int x=pMenu->GetMenuItemCount( ); UINT pID=pMenu->GetMenuItemID(x-1); pMenu->EnableMenuItem(pID, MF_DISABLED);

第三种方法:

ModifyStyle(WS_MAXIMIZEBOX, 0); 这个函数也可以是最大化按钮失效!

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

2.创建动态菜单

void CMainFrame::OnSelectState(NMTOOLBAR* pnmtb, LRESULT *plr) { // }

CMenu menu; if(!menu.CreateMenu()) return;

menu.AppendMenu(MF_STRING,0,\开始\ menu.AppendMenu(MF_STRING,0,\结束\ CRect rc;

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风格显示既可。 BOOL CxxFrameWnd::PreCreateWindow(CREATESTRUCT& cs) {

cs.style &= ~WS_MAXIMIZEBOX; return CFrameWnd::PreCreateWindow(cs); }

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

[解决方法]

右键菜单是系统菜单,只要将其WS_SYSMENU的属性去掉即可. [程序实现]

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { ........

long style = GetWindowLong(m_hWnd, GWL_STYLE); style &= ~WS_SYSMENU;

SetWindowLong(m_hWnd, GWL_STYLE, style); return 0; }

5.修改标题栏高度

NONCLIENTMETRICS nm

调用SystemParametersInfo(SPI_GETNONCLIENTMETRICS,sizeof(nm),&nm,0) 重设SystemParametersInfo(SPI_SETNONCLIENTMETRICS,sizeof(nm),&nm,0)

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

最大化、最小化将发送WM_SYSCOMMAND消息。要处理该消息,可以这么做: 1、在Form的头文件中添加:

void __fastcall RestrictMinimizeMaximize(TMessage &Msg);

BEGIN_MESSAGE_MAP

MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, RestrictMinimizeMaximize) END_MESSAGE_MAP(TForm) 2、在Form的单元文件中添加:

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