- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
09-定制应用程序外观
Lesson 9
1、在窗口建立之前改变窗口外观,第三课讲mfc运行机制的时候说过这个函数了,留了一个后门给我们
BOOL CMainFrame::PreCreateWindow(GREATESTRUCT cs)
{
if(!CFrameWnd::PreCreateWindow(cs))
return FALSE;
改变cs结构体
return TRUE;
}
改宽高,可以直接cs.x=*,cs.y=*
改窗口标题,必须先改窗口的类型,因为原来默认FWS_ADDTOTITLE | WS_OVERLAPPEDWINDOW
FWS_ADDTOTITLE 默认使用文档标题,去掉这个标志就可以了
//cs.style=~FWS_ADDTOTITLE;
cs.style=WS_OVERLAPPEDWINDOW;
cs.lpszName=;
2、在窗口建立之后改变窗口外观,在OnCreate()用SetWindowLong()
LONG SetWindowLong(HWND hWnd,int nIndex,LONG dwNewLong); //sdk函数,改变指定窗口的属性
要改变的窗口的句柄 你要改变的属性 新的值
改变属性用GWL_STYLE指定改变的是窗口类型
获取窗口信息
LONG SetWindowLong(HWND hWnd,int nIndex); //哪个窗口,什么类型
//SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW);
SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE) ~WS_MAXIMIZEBOX);
3、改变图标,光标,背景,应该在PreCreateWindow()中编写
获取当前应用程序的句柄
HINSTANCE AfxGetInstanceHandle();
通过重写窗口类,达到修改程序外观的目的
WNDCLASS wndcls; //重写窗口类
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_HELP);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=AfxGetInstanceHandle();
wndcls.lpfnWndProc=::DefWindowProc; //cwnd类中有一个同名的函数,所以要用::区分
wndcls.lpszClassName=; //窗口类名
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(wndcls); //注册窗口类
cs.lpszClass=; //把新的窗口类送给PreCreateWindow()中传入的参数cs
修改窗口图标,应该在MainFrame类中修改,因为图标是属于框架类的
修改光标,背景应该在View类中修改,因为那是view类窗口上的,把最后一句移到view同函数中即可
4、上面的方法太麻烦了,用另一个函数,
LPCTSTR AFXAPI AfxRegisterWndClass(UINT nClassStyle,HCURSOR hCursor=0,HBRUSH hbrBackground=0,HICON hIcon=0);//窗口类型,光标,画刷,图标,返回新类的类名
缺省参数,箭头光标,空画刷,windows标志图标
可以这样写,达到上面一样的目的
cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,0,0,LoadIcon(NULL,IDI_WARNING));
5、窗口建立后改变外观
DWORD SetClassLong(HWND hWnd,int nIndex,LONG dwNewLong); //改变WNDCLASSEX结构体的内容
哪个窗口 改变类型 新类型
改变图标
文档评论(0)