Visual C++ 2011-4-15
2011-04-16 15:22 Clingingboy 阅读(700) 评论(0) 编辑 收藏 举报
一.对话框创建步骤
- 创建一个资源对话框
- 创建一个继承自CDialog的类,关联资源对话框ID
- 借助Class Wizard来添加控件ID与实例关联,事件等
参考Visual c++ .net 第七章
二.CBitmapButton的用法
参考:http://www.cnblogs.com/qqingmu/archive/2007/09/06/884840.html
http://www.vckbase.com/document/viewdoc/?id=1834
两步:
- 设置控件属性Owner Draw为true
- 加载资源并关联控件
//CBitmapButton对象m_bmpBtn的LoadBitmaps函数加载程序内bmp资源。
m_bmpBtn.LoadBitmaps(IDB_BITMAP4,IDB_BITMAP5);
m_bmpBtn.SubclassDlgItem(IDC_TEST,this);//关联控件
m_bmpBtn.SizeToContent();
三.LoadImage
Loads an icon, cursor, animated cursor, or bitmap.
示例:
hbm = (HBITMAP) ::LoadImage (NULL, "E:\\bt_down_center.bmp", IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);//动态加载磁盘bmp文件
四.关联CBitmap和外部位图资源
CBitmap默认只能使用内部位图资源,太多的话,则会导致dll文件太大,如果要用外部资源的话则先用LoadImage 载入资源,然后用CGdiObject::Attach方法,把CBitmap与GDI对象HBITMAP关联起来,这样就可以用CBitmap对象来操作了.
使用完后记得用Detach方法释放关联
如下:
HBITMAP hBitmap;
hBitmap = (HBITMAP) ::LoadImage (NULL, lpszPathName,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (hBitmap == NULL) {
CString string;
string.Format (_T ("%s does not contain a DIB"), lpszPathName);
AfxMessageBox (string);
return FALSE;
}
m_bitmap.Attach (hBitmap);
五.Owner draw
是有限定的,并非所有控件都可以,其还规定了Owner draw的行为和状态,CustomDraw则不同,想怎么样话就怎么画,不必遵守Owner draw的规则
/*
* Owner draw control types
*/
#define ODT_MENU 1
#define ODT_LISTBOX 2
#define ODT_COMBOBOX 3
#define ODT_BUTTON 4
#if(WINVER >= 0x0400)
#define ODT_STATIC 5
#endif /* WINVER >= 0x0400 */
/*
* Owner draw actions
*/
#define ODA_DRAWENTIRE 0x0001
#define ODA_SELECT 0x0002
#define ODA_FOCUS 0x0004
/*
* Owner draw state
*/
#define ODS_SELECTED 0x0001
#define ODS_GRAYED 0x0002
#define ODS_DISABLED 0x0004
#define ODS_CHECKED 0x0008
#define ODS_FOCUS 0x0010
六.LRESULT,LPARAM,WPARAM
WPARAM表示16位,LPARAM和LRESULT均表示32位整型
参考:http://topic.csdn.net/t/20020529/20/763145.html
七.GDI的双缓冲(CreateCompatibleDC)
使用了CreateCompatibleDC(即拷贝原有DC的参数)、CreateCompatibleBitmap和BitBlt这几个函数,即创建一个DC,然后在DC中创建一个画板,画板创建好就开始画图,完成以后再将这个DC的数据拷贝到屏幕上显示.
双缓冲就是为了防止屏幕闪烁,去除没有必要的刷新,拥有2个DC,一个在前台呈现,一个在后台绘画,一直交互
参考:http://blog.csdn.net/livedeal/archive/2007/05/07/1598763.aspx
http://zhidao.baidu.com/question/149613341.html
http://blog.csdn.net/axes/archive/2005/04/19/353867.aspx
八.Visual C++ Control Demo
http://blog.csdn.net/axes/archive/2005/04/21/357691.aspx
九.动态链接库
即封装成dll给别的程序调用,没有.net这么简单.下面总结下.
导出方法有两种:
参考:http://www.cnblogs.com/enterBeijingThreetimes/archive/2010/08/04/1792099.html
导出c++类的方法http://wenku.baidu.com/view/c216fa2c7375a417866f8f24.html
DLL有入口点DllMain函数
参考:http://blog.csdn.net/formerman/archive/2009/07/12/4341632.aspx
具体可参考书籍:Windows核心编程,Visual C++ for .net(第六版),Windows程序设计---基于Visual C++实现
十.MFC CBitmapButton+文字写入
当Button用了CBitmapButton后,文字将被盖住,所以要想办法重写文字
参考:http://blog.csdn.net/iceiilin/archive/2011/04/11/6316717.aspx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2007-04-16 数据库连接方案比拼
2006-04-16 使用XmlSchemaSet验证
2006-04-16 学习Professional ASP.NET 2.0 XML(二)
2006-04-16 学习Professional ASP.NET 2.0 XML(一)
2006-04-16 asp.net2.0快速入门教程下载