MFC编程实例之优化笔记
小职 2018-07-05 来源 : 阅读 1606 评论 0

摘要:本文主要向大家介绍了MFC编程实例之优化笔记,通过具体的内容向大家展示,希望对大家学习MFC编程实例有所帮助。

本文主要向大家介绍了MFC编程实例之优化笔记,通过具体的内容向大家展示,希望对大家学习MFC编程实例有所帮助。

最近一直在考虑用什么语言做上位机程序比较好?固然,C#是比较成熟,也是大家乐意选择的,但是MFC怎么不可以呢?

昨天逛了好多论坛,看大家对做图形化界面语言的想法,后来总结了一条,只要把其中一个玩熟,什么都可以做!

在MFC优化的过程中,逐渐领悟到美学的重要性,我觉得程序员,特别是嵌入式开发的程序员(从BSP-->Kernel-->APP)更是要涉猎广泛。

另外我说一个自己的想法:程序要不仅需要过硬的技术,还需要严谨的思维,独特的美学素养,差不多的文学功底(因为你要写技术文档和博客嘛);

 

说了一堆废话:总之,我后来决定,接着MFC的道路,继续发展! 【PS:其实我是一只小菜鸟!】

1、如何更改生成的程序图标?

方法一:找一张ICO图标,res/programname.ico文件,就可以啦,这时候你运行后得到的图标可能还是原来MFC的默认图标,这时候你只要把工程目录下的Debug和Release文件删除掉,重新编译生成就能得到更换图标后的程序。或者直接RebuildAll,再运行,怎么样很简单吧。
当然,你如果你在你的工程里操作也没有问题,在工作区的resorce页中的Icon中把ID为IDR_MAIN的图标资源删除,再导入自己制作的图标资源,把资源ID改为IDR_MAIN就OK啦。

方法二:
上面这个的工作十分简单,但是如果要在程序中写代码改变我们应用程序的图标,比如有时候我们要在程序中动态改变程序的标题栏、任务栏图标或是托盘的图标,那就要花点功夫了。其实也不是很难,主要用几个函数搞定,如果是MFC主要就是 LoadIcon和 SetIcon。
比如我们在OnInitDialog或是OnCreate中加入:
AfxGetApp()->LoadIcon(IDI_ICON1);
SetIcon(ico,true);
SetIcon(ico,false);
另外你可能要问,MFC程序默认是怎么加载它的图标的,其实很简单,在主对话框的构造函数中有这样一句:
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAIN);
这就是加载默认图标的,而在OnInitDialog初始化函数中有这两行代码:
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
这两行代码就将应用程序的图标设置好了。到这里聪明的你应该能触类旁通了吧,其实在MFC中更换或设置图标的方式有很多种,像QQ这样动态更换图标也不是一件太难的事。

2、如何更改主界面的背景为图片?

修改OnPint()函数的else部分为

[cpp] view plain copy

1. //CDialog::OnPaint();               //注释掉  

2. CPaintDC dc(this);  

3. CBitmap   bitmap;  

4. bitmap.LoadBitmap(IDB_BITMAP2);     //这个IDB_BITMAP2要自己添加  

5. CBrush   brush;  

6. brush.CreatePatternBrush(&bitmap);  

7. CBrush* pOldBrush = dc.SelectObject(&brush);  

8. dc.Rectangle(0,0,900,480);          // 这些参数可以调整图片添加位置和大小  

9. dc.SelectObject(pOldBrush);  

3、如何设置按钮(Button)标签为图片?

首先设置按键的属性:在Styles里面选中Bitmap

[cpp] view plain copy

1. HBITMAP hBmp=::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP_FOR_BUTTON));  

2. m_button.SetBitmap(hBmp);  

m_button 为按键添加的控制变量;

IDB_BITMAP_FOR_BUTTON 为添加的按键位图

4、如何设置静态字体颜色?

重载OnCtlColor函数,在ClassWizard里面添加WM_CTLCOLOR->Add Function->Edit Code

[cpp] view plain copy

1. #define CTLCOLOR_MSGBOX         0  

2. #define CTLCOLOR_EDIT           1  

3. #define CTLCOLOR_LISTBOX        2  

4. #define CTLCOLOR_BTN            3  

5. #define CTLCOLOR_DLG            4  

6. #define CTLCOLOR_SCROLLBAR      5  

7. #define CTLCOLOR_STATIC         6  

8. #define CTLCOLOR_MAX            7  

根据上面的定义我们来判断我们要设置那个,这里是静态字体那么我们就要选CTLCOLOR_STATIC

[cpp] view plain copy

1. HBRUSH CServerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)   

2. {  

3.     HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);  

4.     // TODO: Change any attributes of the DC here  

5.     UINT uid=pWnd->GetDlgCtrlID();  

6.     if(nCtlColor == CTLCOLOR_STATIC)  

7.     {  

8.         pDC->SetTextColor(0x99cc32);  

9.         pDC->SetBkColor(0x000000);  

10.     }  

11.     if(nCtlColor == CTLCOLOR_EDIT)  

12.     {  

13.         pDC->SetTextColor(0x99cc32);  

14.         pDC->SetBkColor(0xFFFF00);  

15.     }  

16.     // TODO: Return a different brush if the default is not desired  

17.     return hbr;  

18. }  

5、文本框字体颜色和背景色的设置

重载OnCtlColor函数,在ClassWizard里面添加WM_CTLCOLOR->Add Function->Edit Code

除了上面一种方法外还可以按照下面的重装办法:

[cpp] view plain copy

1. HBRUSH CServerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)   

2. {  

3.     HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);  

4.     // TODO: Change any attributes of the DC here  

5.     UINT uid=pWnd->GetDlgCtrlID();  

6.     if(this->m_display.GetDlgCtrlID() == uid)  

7.     {  

8.         pDC->SetTextColor(RGB(0xff,0xff,0xff));  

9.         pDC->SetBkColor(RGB(0x7f,0,225));  

10.     }  

11.     // TODO: Return a different brush if the default is not desired  

12.     return hbr;  

13. }  

这里的m_display变量为Edit Box的控制变量;这种方法,能针对某一个模块进行配置!根据上面两个,关于其他的大家可以触类旁通了!

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

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(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小时内训课程