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