VC编程之使用mfc修改窗口背景,图表
小标 2019-03-20 来源 : 阅读 1343 评论 0

摘要:本文主要向大家介绍了VC编程之使用mfc修改窗口背景,图表,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之使用mfc修改窗口背景,图表,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

VC编程之使用mfc修改窗口背景,图表

打开vc+界面。 一. 窗口创建之前修改,用自定义的窗口类WNDCLASS wc
由于窗口的图标,光标,背景是在窗口类设计是指定的,因此要改的话, 就自己定义一个WNDCLASS wc,按照自己的需要填充wc,并注册RegisterClass(&wc)
1.
在MFC程序中,要修改出现窗口图表只能在框架类进行(CMainFrame)
2.
3.
要修改背景和光标,应该在视类中进行,在框架类修改则看不见效果,因为MFC程序有2个窗口,视类和框架类,视类覆盖了框架类
4.
在框架类CMainFrame的虚函数PreCreateWindow中去修改,这样等于是在窗口创建之前就修改.
[cpp] view plaincopy 01.//在窗口创建之前修改,要修改什么,就对编写一个自己的窗口类wc,并注册
02.BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
03.{
04. if( !CFrameWnd::PreCreateWindow(cs) )
05. return FALSE;
06. // TODO: Modify the Window class or styles here by modifying
07. // the CREATESTRUCT cs
08.
09.//------- 定义一个新的窗口类 wc
10.
11. WNDCLASS wc={0};
12. wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
13. wc.hCursor =LoadCursor(NULL,IDC_HELP);
14. wc.hIcon =LoadIcon(NULL,IDI_ERROR);
15. wc.hInstance = AfxGetInstanceHandle();
16. wc.lpfnWndProc = ::DefWindowProc;//全局的Win32API
17. wc.lpszClassName ="sunxin.org"; //这个名称取定了,不能随便改了,这就好比一个资源的名称,
18. wc.lpszMenuName =NULL;
19. wc.style =CS_HREDRAW|CS_VREDRAW;
20.
21. RegisterClass(&wc); //注册
22. cs.lpszClass = "sunxin.org"; //把注册的类传给cs
23. return TRUE;
24.}
客户区背景色,光标等的修改还必须在CStyleView的虚函数PreCreateWindow中去进行:
[cpp] view plaincopy 01.BOOL CStyleView::PreCreateWindow(CREATESTRUCT& cs)
02.{
03. // TODO: Modify the Window class or styles here by modifying
04. // the CREATESTRUCT cs
05.
06.//客户区背景色,光标等的修改生效都必须在View类中加下面这条语句,使用前面已经注册的窗口类名
07.
08. cs.lpszClass = "sunxin.org";//这个"sunxin.org"就是前面定义的那个窗口类的类名
09.
10. return CView::PreCreateWindow(cs);
11.}

二. 窗口创建之前修改,用全局函数AfxRegisterWndClass 修改
LPCTSTR AFXAPI AfxRegisterWndClass( UINT nClassStyle, HCURSOR hCursor = 0, HBRUSH hbrBackground = 0, HICON hIcon = 0 );

 在框架类中:CMainFrame::PreCreateWindow(CREATESTRUCT& cs)  
[cpp] view plaincopy 01.BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
02.{
03. if( !CFrameWnd::PreCreateWindow(cs) )
04. return FALSE;
05. // TODO: Modify the Window class or styles here by modifying
06. // the CREATESTRUCT cs
07.
08.//------使用全局函数AfxRegisterWndClass来修改
09. cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,
10. 0, //不改光标,因为在框架类总改了也看不到
11. 0,//不改背景,因为在框架类中改了也看不见框架的背景
12. LoadIcon(NULL,IDI_WARNING) // 能该的就是这个框架图标了
13. );
14.
15.
16. return TRUE;
17.}
在VIEW类中:BOOL CStyleView::PreCreateWindow(CREATESTRUCT& cs)
[cpp] view plaincopy 01.BOOL CStyleView::PreCreateWindow(CREATESTRUCT& cs)
02.{
03. // TODO: Modify the Window class or styles here by modifying
04. // the CREATESTRUCT cs
05.
06. //------使用全局函数AfxRegisterWndClass来修改
07. cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,
08. LoadCursor(NULL,IDC_CROSS), //改光标
09. (HBRUSH)GetStockObject(BLACK_BRUSH),//改背景,如果用NULL就是透明的了
10. 0 // 图标不用改了,在框架类中改了.
11. );
12.
13.
14.
15. return CView::PreCreateWindow(cs);
16.}
三. 窗口创建之后修改,用SetClassLong(),在OnCreate()中修改/
  因为是在窗口创建之后,所以肯定是在OnCreate()中.

  在MainFrame中也只能修改ICON
[cpp] view plaincopy
1.
 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
2.
02.{
03. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
04. return -1;
05.
06. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
07. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
08. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
09. {
10. TRACE0("Failed to create toolbar\n");
11. return -1; // fail to create
12. }
13.
14.
15. if (!m_wndStatusBar.Create(this) ||
16. !m_wndStatusBar.SetIndicators(indicators,
17. sizeof(indicators)/sizeof(UINT)))
18. {
19. TRACE0("Failed to create status bar\n");
20. return -1; // fail to create
21. }
22.
23.
24. // TODO: Delete these three lines if you don't want the toolbar to
25. // be dockable
26. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
27. EnableDocking(CBRS_ALIGN_ANY);
28. DockControlBar(&m_wndToolBar);
29.
30.//------用SetClassLong()修改标题栏图标
31. SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(NULL,IDI_ERROR));
32.
33.
34. return 0;
35.}
在view中可以修改背景色,光标等等,但是view中没OnCreate函数,所以还必须先添加消WM_CREATE息响应函数
[cpp] view plaincopy 01.// CStyleView message handlers
02.
03.// 在CStyleView类中增加WM_CREATE消息响应函数
04.int CStyleView::OnCreate(LPCREATESTRUCT lpCreateStruct)
05.{
06. if (CView::OnCreate(lpCreateStruct) == -1)
07. return -1;
08.
09. // TODO: Add your specialized creation code here
10.
11.//------用SetClassLong()修改背景色和光标
12. SetClassLong(m_hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(BLACK_BRUSH));//修改背景色
13. SetClassLong(m_hWnd,GCL_HCURSOR,(LONG)LoadCursor(NULL,IDC_HELP));//修改背景色
14.
15. return 0;
16.}
end    

以上就介绍了VC/MFC的学习,希望对VC/MFC有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言VC/MFC频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程