首页 > C/C++开发工具专区 > VC技术 > Visual C++ 编程技巧之二
2006
03-12

Visual C++ 编程技巧之二

9. 如何改变窗口的图标?


向窗口发送 WM_SECTION消息。


Example:


HICON hIcon=AfxGetApp() ->LoadIcon(IDI_ICON);


ASSERT(hIcon);


AfxGetMainWnd() ->SendMessage(WM_SECTION,TRUE,(LPARAM) hIcon);


10. 如何改变窗口的缺省风格?


重栽 CWnd:: PreCreateWindow 并修改CREATESTRUCT结构来指定窗口风格和其他


创建信息.


Example: Delete “Max” Button and Set Original Window’s Position and Size


BOOL CMainFrame:: PreCreateWindow (CREATESTRUCT &cs)


{


cs.style &=~WS_MAXINIZEMOX;


cs.x=cs.y=0;


cs.cx=GetSystemMetrics(SM_CXSCREEN/2);


cs.cy=GetSystemMetrics(SM_CYSCREEN/2);


return CMDIFramewnd ::PreCreateWindow(cs);


}


11. 如何将窗口居中显示?


Easy, Call Function CWnd:: Center Windows


Example(1): Center Window( ); //Relative to it’s parent


// Relative to Screen


Example(2): Center Window(CWnd:: GetDesktopWindow( ));


//Relative to Application’s MainWindow


AfxGetMainWnd( ) -> Center Window( );


12. 如何让窗口和 MDI窗口一启动就最大化和最小化?


先说窗口。


InitStance 函数中设定 m_nCmdShow的 取值.


m_nCmdShow=SW_SHOWMAXMIZED ; //最大化


m_nCmdShow=SW_SHOWMINMIZED ; //最小化


m_nCmdShow=SW_SHOWNORMAL ; //正常方式


MDI窗口:


如果是创建新的应用程序,可以用 MFC AppWizard Advanced 按钮并在


MDI子窗口风格组中检测最大化或最小化; 还可以重载 MDI Window


PreCreateWindow函数,设置WS_MAXMIZE or WS_MINMIZE;


如果从 CMDIChildWnd 派生,调用 OnInitialUpdate函数中的 CWnd::Show


Window来指定 MDI Child Window的 风格。


13. 如何使程序保持极小状态?


很有意思的 问题


这么办: 在恢复程序窗体大小时, Windows会发送WM_QUERY-OPEN消息,


ClassWizard设置成员函数 OnQueryOpen() ,add following code:


Bool CMainFrame:: OnQueryOpen( )


{


Return false;


}


14. 如何限制窗口的大小?


也就是 FixedDialog形式。 Windows 发送 WM_GETMAXMININFO消息来跟踪,


响应它,OnGetMAXMININFO 中写代码:


15. 如何使窗口不可见?


很简单,SW_HIDE 隐藏窗口,可以结合 FindWindow,ShowWindow 控制.


16. 如何使窗口始终在最前方?


两种途径.


BringWindowToTop(Handle);


SetWindowPos函数,指定窗口的最顶风格,WS_EX_TOPMOST扩展窗口的风格


Example:


void ToggleTopMost( CWnd *pWnd)


{


ASSERT_VALID(pWnd);


pWnd ->SetWindowPos(pWnd-> GetStyle( ) &WS_EX_TOPMOST)?


&wndNoTopMOST: &wndTopMost,0,0,0,0,SSP_NOSIZE|WSP_NOMOVE);


留下一个回复