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, , &blend, ULW_ALPHA : ULW_COLORKEY);
FreeLibrary(hInst);
}

关于最后一个参数的解释说明:

/* dwFlags  的解释说明 */
dwFlags [in]
Type: DWORD
This parameter can be one of the following values.
Value Meaning
//----------------------------------------------------------------
ULW_ALPHA Use pblend as the blend function. If the display mode is
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.

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[];
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 定义

MFC中小笔记(四)的更多相关文章

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

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

  2. MFC 学习笔记

    MFC 学习笔记 一.MFC编程基础: 概述: 常用头文件: MFC控制台程序: MFC库程序: 规则库可以被各种程序所调用,扩展库只能被MFC程序调用. MFC窗口程序: 示例: MFC库中类的简介 ...

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

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

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

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

  5. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

  6. Java学习笔记四---打包成双击可运行的jar文件

    写笔记四前的脑回路是这样的: 前面的学习笔记二,提到3个环境变量,其中java_home好理解,就是jdk安装路径:classpath指向类文件的搜索路径:path指向可执行程序的搜索路径.这里的类文 ...

  7. Java加密与解密笔记(四) 高级应用

    术语列表: CA:证书颁发认证机构(Certificate Authority) PEM:隐私增强邮件(Privacy Enhanced Mail),是OpenSSL使用的一种密钥文件. PKI:公钥 ...

  8. Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  9. MFC原理第四讲.动态创建机制

    MFC原理第四讲.动态创建机制 一丶要学习的知识点以及简介 动态创建是什么意思? 动态创建其实就是跟C++的new一样.都是创建对象.但是规避了C++语法的缺陷. 例如: char * ClassNa ...

随机推荐

  1. 【转】Sizeof与Strlen的区别与联系

    原文地址:http://www.cnblogs.com/carekee/articles/1630789.html 1.sizeof  sizeof(...)是运算符,在头文件中typedef为uns ...

  2. 【NOIP2015提高组】Day2 T1 跳石头

    题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石(不含起点和终 点的岩石).在比赛过程中,选手们将从 ...

  3. PHP的Session机制

    客户端浏览器和服务器之间通信使用的http协议是一种无状态的协议,在它看来,客户端发起的每个请求都是独立.没有关联的.然而,在实际的Web应用开发中,服务器却经常需要根据用户以往的一些状态或数据对请求 ...

  4. MongoDB自动增长

    MongoDB 没有像SQL一样有自动增长的功能,如果我们需要实现ObjectId自动增长功能,可以通过编程的方式来实现.步骤如下: 1. 创建counters集合: db.createCollect ...

  5. LeetCode 152. Maximum Product Subarray (最大乘积子数组)

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  6. asp.net 第三方UI控件 Telerik KendoUI 之 TreeVIew 的用法记录

    一.前台显示 备注:一次性取出所有节点 function loadTreeData() { $.ajax({ type: 'POST', url: '@(Html.UrlHref("Scri ...

  7. 每天一个linux命令(26):用SecureCRT来上传和下载文件(转载自竹子)

    用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...

  8. 计蒜之道 初赛第一场B 阿里天池的新任务(简单)

    阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次. 首先,定义一个序列 ww: \displ ...

  9. IdentityServer4实现Token认证登录以及权限控制

    相关知识点 不再对IdentityServer4做相关介绍,博客园上已经有人出了相关的系列文章,不了解的可以看一下: 蟋蟀大神的:小菜学习编程-IdentityServer4 晓晨Master:Ide ...

  10. Appium python自动化测试系列之日志的收集(十二)

    ​13.1 日志的定义 13.1.1 日志的定义 听到日志这个东西可能有的人莫名其妙,第一次接触就会觉得我们为什么要收集日志,即使要收集日志那么我们需要收集哪些日志,日志的作用是什么等等. 其实日志无 ...