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",這是錯誤的!


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