Visual C++ 2011-4-15
2011-04-16 15:22 Clingingboy 阅读(696) 评论(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