|   
 | 
| 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);
 
 }
 | 
 |