MFC中小笔记(四)
12、编译透明化界面是出现 WS_EX_LAYERED AC_SRC_ALPHA ULW_ALPHA ULW_OPAQUE undeclared identifier ,搜索发现SDK版本过低。
方法1:搜索SDK,下载合适的SDK(sdk地址)。但是高版本的SDK开发的程序,在低版本上运行时就得需要相当版本的运行库(如果在VS2008上开发的程序,调用了只有.net 3.5之后才有的函数库或者引用头文件,在XP没有装.net 3.5的系统上,是无法正常打开的)。
方法2:自己定义其中的宏,在开发过程中是没关系的。
/*定义高版本的SDK中的宏*/#define WS_EX_LAYERED 0x00080000 #define AC_SRC_ALPHA 0x01 #define ULW_ALPHA 0x00000002 #define ULW_COLORKEY 0x00000001
13、UpdateLayeredWindow : undeclared identifier
原因:SDK版本过低。如果在低版本中调用API的UpdateLayeredWindow ,通过调用动态链接库。 官方解释 连接
/* 通过动态链接库调用 UpdateLayerWindow */HINSTANCE hInst = LoadLibrary("User32.DLL"); if(hInst) { typedef BOOL(WINAPI *UpdateLayeredWindow)(HWND,HDC,POINT *,SIZE *,HDC,POINT *,COLORREF,BLENDFUNCTION *,DWORD);UpdateLayeredWindow myfunc= NULL; //取得UpdateLayeredWindow函数指针 myfunc=(UpdateLayeredWindow)GetProcAddress(hInst, "UpdateLayeredWindow");if(myfunc)myfunc(m_hWnd, pDC->m_hDC, &point, &size, MemDC, &pointSrc, 0, &blend, ULW_ALPHA : ULW_COLORKEY);FreeLibrary(hInst); }
关于最后一个参数的解释说明:
/* dwFlags 的解释说明 */ dwFlags [in]Type: DWORDThis parameter can be one of the following values.Value Meaning //----------------------------------------------------------------ULW_ALPHA Use pblend as the blend function. If the display mode is 256 0x00000002 colors or less, the effect of this value is the same as the effect of ULW_OPAQUE. //----------------------------------------------------------------ULW_COLORKEY Use crKey as the transparency color.0x00000001 //---------------------------------------------------------------- ULW_OPAQUE Draw an opaque layered window.0x0000000 If hdcSrc is NULL, dwFlags should be zero.
View Code
14、在编写含有皮肤、图片的程序,尽量减少将资源导入到 Resource.h 中,那样会增大程序的体积。最好的方式是采用 动态加载的方式。
15、AlphaBlend is not a member of CDC 采用系统的API 进行替换。
16、ON_WM_NCHITTEST 消息的返回值,在不同的SDK下不同。
错误再现:error C2440: 'type cast' : cannot convert
from 'long (__thiscall CMyWnd::*)(class CPoint)'
to 'unsigned int (__thiscall CWnd::*)(class CPoint)'
Pointers to members have different representations; cannot cast between them
afx_msg UINT OnNcHitTest(CPoint point); //VC6.0
afx_msg LRESULT OnNcHitTest(CPoint point);//VS2008
17、错误再现
MyBase.obj : error LNK2001: unresolved external symbol "public: virtual struct CRuntimeClass * __thiscall CMyBase::GetRuntimeClass(void)const " (?GetRuntimeClass@CDlgBase@@UBEPAUCRuntimeClass@@XZ)
MyDlg.obj : error LNK2001: unresolved external symbol "public: virtual struct CRuntimeClass * __thiscall CMyBase::GetRuntimeClass(void)const " (?GetRuntimeClass@CDlgBase@@UBEPAUCRuntimeClass@@XZ)
原因:在类定义中,DECLARE_DYNAMIC(CMyBase)声明了这样一个定义宏,旨在确定运行时对象属于哪一个类而定义的宏。
DEClARE_DYNCREATE/IMPLEMENT_DYNCREATE 是为了“动态创建"类的实例而定义的宏。new可以用来创建对象,但不是动态的。
/*下面的做法是通不过的:*/ char szClassName[60]; cin >> szClassName; CObject* pOb=new szClassName; //通不过 这里就要用到DEClARE_DYNCREATE/IMPLEMENT_DYNCREATE定义的功能了。
但是在使用过程中,如果不进行解释说明 IMPLEMENT_DYNAMIC(CMyBase, CBase) 会出现GetRuntimeClass 错误。出现此错误,可以查看 DECLARE_DYNAMIC 定义。\
MSDN解释(点击 连接)。
/* DECLARE_DYNAMIC 定义 */#define _DECLARE_DYNAMIC(class_name) \ public: \static AFX_DATA CRuntimeClass class##class_name; \virtual CRuntimeClass* GetRuntimeClass() const; \#endif// not serializable, but dynamically constructable #define DECLARE_DYNCREATE(class_name) \DECLARE_DYNAMIC(class_name) \static CObject* PASCAL CreateObject();
DECLARE_DYNAMIC 定义
转载于:https://www.cnblogs.com/Bachelor/p/3572623.html
MFC中小笔记(四)相关推荐
- 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9327377 作者:七十一雾央 新浪微博:http:// ...
- MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结
MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结 1.MFC单文档程序运行流程 1.首先利用全局变量对象 theApp 启动应用程序 (这是因为这个全局对象,基类CWinApp中 this ...
- C++ MFC 学习笔记+小型通讯录系统实现
MFC 最详细入门教程 [MFC常用函数总结](https://www.cnblogs.com/jiu0821/p/4606639.html) [C++ & MFC]https://www.c ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- MSSQL编程笔记四 解决count distinct多个字段的方法
MSSQL编程笔记四 解决count distinct多个字段的方法 参考文章: (1)MSSQL编程笔记四 解决count distinct多个字段的方法 (2)https://www.cnblog ...
- RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)
RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...
- JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档
POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...
- Ethernet/IP 学习笔记四
Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...
最新文章
- html5 游戏学习
- 【NOI2002】贪吃的九头龙
- VMware虚拟机里面无法直接访问主机磁盘怎么办?
- 浩然GG和女朋友的游戏 (数学,规律)
- 将Linux下编译的warning警告信息输出到文件中
- python报错RuntimeError: This event loop is already running
- Java设计模式学习总结(15)——行为型模式之责任链模式
- 温故js系列(11)-BOM
- TCP实现原理(拥塞控制)
- Java Swing事件处理——行为事件及监听处理 ActionListener和内部类
- SnakeMaker:模仿实现 即刻APP 头像拖动的残影效果
- c语言 dirent,DIR和dirent结构体
- DedeCMS顽固木马后门专杀工具V2.0实现方式研究
- 办公软件测试题目,Office高级办公软件测试(附答案)
- intellij idea 更换代码颜色(教程)
- CC1350、CC1352R和CC1352P究竟各有何优势
- 2K Star!超过 50 个专题、450 个好项目,大半年来推荐过的重磅项目合集
- 开源的OA办公系统,解决日常工作管理问题
- Acwing-280-陪审团(背包dp?)
- c语言 数组 随机数 初始化