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, , &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中小笔记(四)的更多相关文章
- 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9327377 作者:七十一雾央 新浪微博:http:// ...
- MFC 学习笔记
MFC 学习笔记 一.MFC编程基础: 概述: 常用头文件: MFC控制台程序: MFC库程序: 规则库可以被各种程序所调用,扩展库只能被MFC程序调用. MFC窗口程序: 示例: MFC库中类的简介 ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- Java学习笔记四---打包成双击可运行的jar文件
写笔记四前的脑回路是这样的: 前面的学习笔记二,提到3个环境变量,其中java_home好理解,就是jdk安装路径:classpath指向类文件的搜索路径:path指向可执行程序的搜索路径.这里的类文 ...
- Java加密与解密笔记(四) 高级应用
术语列表: CA:证书颁发认证机构(Certificate Authority) PEM:隐私增强邮件(Privacy Enhanced Mail),是OpenSSL使用的一种密钥文件. PKI:公钥 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- MFC原理第四讲.动态创建机制
MFC原理第四讲.动态创建机制 一丶要学习的知识点以及简介 动态创建是什么意思? 动态创建其实就是跟C++的new一样.都是创建对象.但是规避了C++语法的缺陷. 例如: char * ClassNa ...
随机推荐
- 用户关注微信公众号后,获取该用户的openID存数据库失败
关注微信公众号后将关注人的openID存入数据库失败,而openID换成字符串写死却可以存入数据库: $wxid=$postObj->FromUserName; $data['wx_openid ...
- CentOS设置系统时间、硬件时间、以及定时校对时间
CentOS设置系统时间和时区 一.设置时区 方法一:使用setup工具 setup 选择Timezone configuration 选择Asia/Shanghai 空格键勾选上System clo ...
- JS框架设计读书笔记之-节点模块
节点的创建 浏览器提供了多种手段创建API,从流行程度依次是document.createElement.innerHTML.insertAdjacentHTML.createContextualFr ...
- PHP使用header方式实现文件下载
php文件下载可以使用http的请求头加上php的IO可以实现,很久之前写过这么一个功能,后来代码没了,今天记录一下 1.先看一下一个正常的http请求 HTTP/1.1 200 OK Server: ...
- 如何在 Apple TV 上使用描述文件
您可以使用 OS X 上的 Apple Configurator 在 Apple TV 上安装配置描述文件. 开始前,请在 Mac 上安装最新版本的 Apple Configurator(如果尚未安装 ...
- Matplotlib常用示例入门
一.Matplotlib介绍 Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形.通过 Matplotlib,开发者可以仅需要几行 ...
- Thinkphp5 常量设置问题
楼主是之前使用了thinkphp3.2快两年了,很早就听说过thinkphp的版本已经到达5了. 不过鉴于早期的版本尚未完善,并没有立即开始学习.最近做一个项目,尝试一下新的知识. 但是在使用的时候, ...
- Android 开发笔记___登陆app
package com.example.alimjan.hello_world; /** * Created by alimjan on 7/4/2017. */ import android.con ...
- JavaScript sort() 方法详解
定义和用法 sort() 方法用于对数组的元素进行排序. 语法 arrayObject.sort(sortby) 参数 描述 sortby 可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注 ...
- cloneNode克隆节点在不同浏览器的差异
cloneNode是用于克隆节点的,如果待克隆的节点还有子节点以及自定义属性.添加的有事件,那么克隆时,可以指定是克隆节点本身,还是将其所有子节点信息也克隆进去,这是通过给cloneNode传递一个布 ...