endif

MFC绘图2-客户区大小和DC

心已入冬 提交于 2019-11-30 14:11:29
MFC绘图2-客户区大小和DC 客户区大小和DC 在绘图前,必须先得到客户区大小和设备上下文DC。 1.获得客户区 绘图一般都是在视图窗口的客户区进行,而客户区的大小在运行时可由用户改变,为了使绘制的图形能随窗口大小自动改变,必须先得到当前客户区大小的数据(宽w和高h)。 获取客户区大小的方法有如下两种: 1)在消息响应函数OnSize中获得 利用属性窗口的信息页,在视图类中添加WM_SIZE消息的响应函数OnSize。该函数在窗口第一次显示或窗口大小被改变时会被Windows系统调用。其输入参数中的cx和cy就是客户区大小的宽和高,可将它们赋值给类变量(如m_iW和m_iH)供绘图时使用。例如 void CDrawView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 m_iW = cx; m_iH = cy; } 其中,nType的值为: <!--[if !supportLists]-->l <!--[endif]-->SIZE_MAXIMIZED(窗口已被最大化) <!--[if !supportLists]-->l <!--[endif]-->SIZE_MINIMIZED(窗口已被最小化) <!--[if !supportLists]--

#ifndef #define #endif

坚强是说给别人听的谎言 提交于 2019-11-30 12:05:36
在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量重定义的错误。在头文件中实用#ifndef #define #endif能避免头文件的重定义。 方法:例如要编写头文件test.h 在头文件开头写上两行: #ifndef _TEST_H #define _TEST_H//一般是文件名的大写 头文件结尾写上一行:#endif这样一个工程文件里同时包含两个test.h时,就不会出现重定义的错误了。 分析:当第一次包含test.h时,由于没有定义_TEST_H,条件为真,这样就会包含(执行 )#ifndef _TEST_H和#endif之间的代码,当第二次包含test.h时前面一次已经定义了_TEST_H,条件为假,#ifndef _TEST_H和#endif之间的代码也就不会再次被包含,这样就避免了重定义了。主要用于防止重复定义宏和重复包含头文件 来源: https://www.cnblogs.com/mhq-martin/p/11583648.html

条件编译#ifdef 和#endif

喜夏-厌秋 提交于 2019-11-29 20:09:02
转于 http://blog.csdn.net/fly_yr/article/details/39964035 C++中 #ifdef 和#endif的作用 一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是 “条件 编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif 它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。 其中#else部分也可以没有,即: #ifdef 程序段1 #denif 在头文件中使用#ifdef和#ifndef是非常重要的,可以防止双重定义的错误。 如你在头文件aaa.h中定义了一个类aaa如下: class aaa { }; 如果两次#include "aaa.h"(不见得是直接,也有可能两个不同的头文件中都包含了这个头文件)就会出错,因为相同的类不能定义两次。把aaa.h稍做修改: #ifndef _aaa_ #define _aaa_ class aaa { }; #endif 就可以避免这样的问题。 因为当你已经包含过这个文件,_aaa_就会有了定义,那么

#ifdef、#ifndef、#else、#endif执行条件编译

蓝咒 提交于 2019-11-29 20:08:06
我们开发的程序不只在pc端运行,也要在移动端运行。这时程序就要根据机器的环境来执行选择性的编译,如对PC端编译PC端的程序,对移动端编译移动端的程序,这里我们就可以用两组条件编译。 #ifdef #endif #ifndef #endif 我们先来了解下#ifdef ...#endif;语法格式是: #ifdef 宏名字 |#ifdef 宏名字 //任意代码 |//任意代码 #endif |#else |//任意代码 |#endif 上面的两种格式是,如果指定了宏,就会执行#ifdef ... #endif中的代码。 // // main.m // Hong_Test // // Created by 程英暾 on 2017/3/20. // Copyright © 2017年 程英暾. All rights reserved. // #import <Foundation/Foundation.h> #define iPad int main(int argc, const char * argv[]) { @autoreleasepool { #ifdef iPad NSLog(@"this is ipad"); #else NSLog(@"this is iphone"); #endif // insert code here... NSLog(@"Hello, World!

条件编译ifndef、ifdef、endif

流过昼夜 提交于 2019-11-29 20:07:51
1、条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif 当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。 其中#else部分也可以没有,即: 1 #ifdef 2 程序段1 3 #endif 2、条件编译命令另一种形式: 1 #ifndef 标识符 2 程序段1 3 #else 4 程序段2 5 #endif 只是第一行与第一种形式不同:将“ifdef”改为“ifndef”。它的作用是:若标识符未被定义则编译程序段1,否则编译程序段2。这种形式与第一种形式的作用相反。 3、条件编译的例子 我们有一个数据类型,在Windows平台中,应该使用long类型表示,而在其他平台应该使用float表示,这样往往需要对源程序作必要的修改,这就降低了程序的通用性。可以用以下的条件编译: 1 #ifdef WINDOWS 2 #define MYTYPE long 3 #else 4 #define MYTYPE float 5 #endif 6 如果在Windows上编译程序,则可以在程序的开始加上 1 #define WINDOWS 这样则编译下面的命令行: #define MYTYPE long 如果在这组条件编译命令之前曾出现以下命令行: 1 #define WINDOWS 0

# ifdef #ifndef 等用法(转)

不想你离开。 提交于 2019-11-29 18:39:33
头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的: #ifndef <标识> #define <标识> ...... ...... #endif <标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h #ifndef _STDIO_H_ #define _STDIO_H_ ...... #endif 2.在#ifndef中定义变量出现的问题(一般不定义在#ifndef中)。 #ifndef AAA #define AAA ... int i; ... #endif 里面有一个变量定义 在vc中链接时就出现了i重复定义的错误,而在c中成功编译。 结论: (1).当你第一个使用这个头的.cpp文件生成.obj的时候,int i 在里面定义了当另外一个使用这个的.cpp再次[单独]生成.obj的时候,int i 又被定义然后两个obj被另外一个.cpp也include 这个头的,连接在一起

修改包装单元(handling unit)用户状态[HU_STATUS_UPDATE]

谁说我不能喝 提交于 2019-11-29 00:18:02
通过vl02n可以修改包装单元(handling unit)的用户状态,如下图: &lt;img class="alignnone size-full wp-image-4603" src="http://www.baidusap.com/wp-content/uploads/2017-06-01_14-52-47.png" alt="" width="908" height="486" srcset="http://www.baidusap.com/wp-content/uploads/2017-06-01_14-52-47.png 908w, http://www.baidusap.com/wp-content/uploads/2017-06-01_14-52-47-740x396.png 740w, http://www.baidusap.com/wp-content/uploads/2017-06-01_14-52-47-768x411.png 768w" sizes="(max-width: 908px) 100vw, 908px" /&gt; 调用函数HU_STATUS_UPDATE也可以更新HU的用户状态。 &lt;img class="alignnone size-full wp-image-4604" src="http://www.baidusap.com/wp

C++头文件为什么要加#ifndef #define #endif

橙三吉。 提交于 2019-11-28 16:27:09
#ifndef 在头文件中的作用 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时 ,就会出现大量“重定义”的错误。在头文件中实用#ifndef #define #endif能避免头文件的重定义。 方法:例如要编写头文件test.h 在头文件开头写上两行: #ifndef _TEST_H #define _TEST_H //一般是文件名的大写 头文件结尾写上一行: #endif 这样一个工程文件里同时包含两个test.h时,就不会出现重定义的错误了。 分析:当第一次包含test.h时,由于没有定义_TEST_H,条件为真,这样就会包含(执行)#ifndef _TEST_H和 #endif之间的代码,当第二次包含test.h时前面一次已经定义了_TEST_H,条件为假,#ifndef _TEST_H和 #endif之间的代码也就不会再次被包含,这样就避免了重定义了。 #include "test.h" #include "debug.h" 如果 debug.h 内代码如下 #include "a.h" #include "test.h" 这样就重复包含了 “test.h” 如果 test.h 定义时 使用 #ifndef #define #endif 语句可以防止重复包含, 当第一次包含test.h时,由于没有定义_TEST_H

iOS 方便的宏定义

蓝咒 提交于 2019-11-28 14:09:46
转载 http://my.oschina.net/yongbin45/blog/150149 // 字符串: #ifndef nilToEmpty #define nilToEmpty(object) (object!=nil)?object:@"" #endif #ifndef formatStringOfObject #define formatStringOfObject(object) [NSString stringWithFormat:@"%@", object] #endif #ifndef nilToEmptyFormatStringOfObject #define nilToEmptyFormatStringOfObject(object) formatStringOfObject(nilToEmpty(object)) #endif // 图片: #ifndef imagePath #define imagePath(imageName) [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"] #endif // 颜色 #define RGBA(r, g, b, a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f

C define详解

偶尔善良 提交于 2019-11-28 08:14:12
1.简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写 if(i<MAXTIME){.........} 编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。 这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义只是简单的文本替换,并不做类型检查,这个问题在下面反映的尤为突出。 2.define的“函数定义” define可以像函数那样接受一些参数,如下 #define max(x,y) (x)>(y)?(x):(y); 这个定义就将返回两个数中较大的那个,看到了吗?因为这个“函数”没有类型检查,就好像一个函数模板似的,当然,它绝对没有模板那么安全就是了。可以作为一个简单的模板来使用而已。 但是这样做的话存在隐患,例子如下: #define Add(a,b) a+b; 在一般使用的时候是没有问题的,但是如果遇到如:c * Add(a,b) * d的时候就会出现问题,代数式的本意是a+b然后去和c,d相乘,但是因为使用了define(它只是一个简单的替换),所以式子实际上变成了 c*a + b*d 另外举一个例子: #define pin (int*); pin a,b; 本意是a和b都是int型指针,但是实际上变成int* a,b; a是int型指针