发布时间 : 星期六 文章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的单元文件中添加: