mfc 数据类型转换一

Win32 程序(SDK 程序)共同使用的数据类型:  

数据类型                         意义                                                                                                

BOOL                     Boolean 值(布尔值,不是TRUE  就是FALSE)
BSTR                     32-bit 字符指针
BYTE                      8-bit  整数,未带正负号
COLORREF          32-bit 数值,代表一个颜色值
DWORD                32-bit 整数,未带正负号
LONG                     32-bit 整数,带正负号
LPARAM                32-bit 数值,做为窗口函数或callback  函数的一个参数
LPCSTR                32-bit 指针,指向一个常数字符串
LPSTR                   32-bit 指针,指向一个字符串
LPCTSTR              32-bit 指针,指向一个常数字符串。此字符串可移植到Unicode  和DBCS(双字节字集)
LPTSTR                 32-bit 指针,指向一个字符串。此字符串可移植到Unicode  和DBCS(双位组字集)
LPVOID                 32-bit 指针,指向一个未指定类型的资料
LPRESULT            32-bit 数值,做为窗口函数或callback  函数的回返值
UINT                        在Win16 中是一个16-bit 未带正负号整数,在Win32 中是一个32-bit 未带正负号整数。
WNDPROC           32-bit 指针,指向一个窗口函数
WORD                   16-bit 整数,未带正负号
WPARAM               窗口函数的callback  函数的一个参数。在Win16 中是16 bits ,在Win32 中是32 bits 。



MFC 独特的数据类型:  
数据类型                                        意义                                                                                 

POSITION                一个数值,代表collection 对象(例如数组或串行)中的元素位置。常使用于MFC collection classes 。
LPCRECT              32-bit  指针,指向一个不变的RECT 结构。


MFC 数据类型与C++ 语言数据类型之间的对应,定义于WINDEF.H          

#define  NULL       0
#define  far                 //
#define  near               //
#define  pascal      __stdcall   //
#define  cdecl        _cdecl
#define  CDECL   _cdecl


#define  CALLBACK     __stdcall  //              
#define  WINAPI             __stdcall  //
#define  WINAPIV          __cdecl    //
#define  APIENTRY       WINAPI     //
#define  APIPRIVATE   __stdcall
#define  PASCAL          __stdcall
#define  FAR                 far
#define  NEAR              near
#define  CONST           const


typedef  unsigned long        DWORD;
typedef  int                            BOOL;
typedef  unsigned char        BYTE;
typedef  unsigned short       WORD;
typedef  float                         FLOAT;
typedef  FLOAT                   *PFLOAT;
typedef  BOOL near            *PBOOL;
typedef  BOOL far               *LPBOOL;
typedef  BYTE near             *PBYTE;
typedef  BYTE far                 *LPBYTE;

typedef  int near                    *PINT;
typedef  int far                       *LPINT;
typedef  WORD near           *PWORD;
typedef  WORD far              *LPWORD;
typedef  long far                   *LPLONG;
typedef  DWORD near        *PDWORD;
typedef  DWORD far           *LPDWORD;
typedef  void far                   *LPVOID;
typedef  CONST void far    *LPCVOID;
typedef  int                            INT;
typedef  unsigned int           UINT;
typedef  unsigned int           *PUINT;


/* Types use for passing & returning polymorphic values */  
typedef  UINT          WPARAM;
typedef  LONG        LPARAM;
typedef  LONG        LRESULT;
typedef  DWORD   COLORREF;
typedef  DWORD   *LPCOLORREF;


typedef struct tagRECT
{
    LONG    left;
    LONG    top;
    LONG    right;
    LONG    bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
typedef const RECT FAR* LPCRECT;


typedef struct tagPOINT
{
    LONG  x;
    LONG  y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;


typedef struct tagSIZE
{
    LONG        cx;
    LONG        cy;
} SIZE, *PSIZE, *LPSIZE;




MFC下的常用字符串数据类型表示的含义:

L:Long  长  P:Point  指针  C:Const  常量  W:Wchar_t  宽字符  T:TCHAR   STR:String  字符串



1)  int ->CString
     int n = 1;
     CString str;
     str.Format("%d",n);


2)  long --> CString
     long l ;
     CString str;

     str.format("%ld",l);


3)  float->CString
     float f = 0.0;
     CString str;
     str.Format("%f",f);


4)  double --->CString
     double d;
     CString str;
     str.format("%f",d);


5) char*->CString
     char sz[128];
     CString str;
      str.Format("%s",sz);


6)  CTime-->CString
      CTime time;
      time = CTime::GetCurrentTime();
      CString strTime;
      strTime.Format("%s",time .Format("%Y-%m-%d"));
      MessageBox(strTime);


/////////////////////////////////////////////////////////////////////////////////////////////////////


1) CString->int
     CString str = "1";
     int n = atoi(str.GetBuffer(0));

2) CString->float
     CString str = "0.1";
     float f = atof(str.GetBuffer(0));


3) CString -> char*
     CString str;
     int nLength = str.GetLength();
     char* sz = new char[nLength];
     sz = str.GetBuffer(0);


4)  CString--〉CTime
     CString sur;
     sur="2006-08-09";
     COleDateTime time1;
     time1.ParseDateTime(sur);
     SYSTEMTIME systime;
     VariantTimeToSystemTime(time1, &systime);
     CTime tm(systime);
     m_time=tm;
     UpdateData(false);

 

Format函数第一个参数是要转的那个数的类型
我现在的程序是 
int a = 21; 
double b = 3.45; 
CString str; 
str.Format("%03d%02.4f" , a , b); 
现在得到的结果是"0213.4500" 
%02.4f对b的整数部分不起作用 
我想要得到一个形如aaabb.bbbb的字符串("02103.4500"),如果a不足3位,用0补齐,如果b的整数和小数不足2位和4位也要用0补齐
CString::Format("%d",xx);其中xx不能为双精度,不然会转化错误,应该使用CString::Format("%d",(LONG)xx);
例:
DOUBLE d = 22.443;
CString str;
str.Format("%d", d);转化后的str = "1924145349",这是错误的!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章