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中小笔记(四)相关推荐

  1. 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9327377 作者:七十一雾央 新浪微博:http:// ...

  2. MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结

    MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结 1.MFC单文档程序运行流程 1.首先利用全局变量对象 theApp 启动应用程序 (这是因为这个全局对象,基类CWinApp中 this ...

  3. C++ MFC 学习笔记+小型通讯录系统实现

    MFC 最详细入门教程 [MFC常用函数总结](https://www.cnblogs.com/jiu0821/p/4606639.html) [C++ & MFC]https://www.c ...

  4. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  5. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  6. MSSQL编程笔记四 解决count distinct多个字段的方法

    MSSQL编程笔记四 解决count distinct多个字段的方法 参考文章: (1)MSSQL编程笔记四 解决count distinct多个字段的方法 (2)https://www.cnblog ...

  7. RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)

    RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...

  8. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档

    POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...

  9. Ethernet/IP 学习笔记四

    Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...

最新文章

  1. html5 游戏学习
  2. 【NOI2002】贪吃的九头龙
  3. VMware虚拟机里面无法直接访问主机磁盘怎么办?
  4. 浩然GG和女朋友的游戏 (数学,规律)
  5. 将Linux下编译的warning警告信息输出到文件中
  6. python报错RuntimeError: This event loop is already running
  7. Java设计模式学习总结(15)——行为型模式之责任链模式
  8. 温故js系列(11)-BOM
  9. TCP实现原理(拥塞控制)
  10. Java Swing事件处理——行为事件及监听处理 ActionListener和内部类
  11. SnakeMaker:模仿实现 即刻APP 头像拖动的残影效果
  12. c语言 dirent,DIR和dirent结构体
  13. DedeCMS顽固木马后门专杀工具V2.0实现方式研究
  14. 办公软件测试题目,Office高级办公软件测试(附答案)
  15. intellij idea 更换代码颜色(教程)
  16. CC1350、CC1352R和CC1352P究竟各有何优势
  17. 2K Star!超过 50 个专题、450 个好项目,大半年来推荐过的重磅项目合集
  18. 开源的OA办公系统,解决日常工作管理问题
  19. Acwing-280-陪审团(背包dp?)
  20. c语言 数组 随机数 初始化

热门文章

  1. 服务 进程守护 MarsDaemon 简介
  2. HttpServletResponse对象介绍
  3. Java多线程中run和start的区别
  4. android 对for循环进行优化
  5. Pytorch模型迁移和迁移学习,导入部分模型参数
  6. 基础数据类型操作(一)——整型、字符串
  7. vue 实现返回上一页不请求数据keep-alive
  8. java中的类型转换
  9. 数据结构与算法 --- js描述集合
  10. 利刃 MVVMLight 1:MVVMLight介绍以及在项目中的使用