锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产视频一区,欧美大片91,欧美另类亚洲http://m.shnenglu.com/lilac/category/5636.html鍋?鎴愪負.鎷ユ湁.zh-cnWed, 21 May 2008 02:39:10 GMTWed, 21 May 2008 02:39:10 GMT60[杞琞甯哥敤鏁版嵁綾誨瀷鐨勪嬌鐢ㄤ笌杞崲http://m.shnenglu.com/lilac/archive/2008/01/12/41062.html鏉庝簹鏉庝簹Sat, 12 Jan 2008 15:07:00 GMThttp://m.shnenglu.com/lilac/archive/2008/01/12/41062.htmlhttp://m.shnenglu.com/lilac/comments/41062.htmlhttp://m.shnenglu.com/lilac/archive/2008/01/12/41062.html#Feedback0http://m.shnenglu.com/lilac/comments/commentRss/41062.htmlhttp://m.shnenglu.com/lilac/services/trackbacks/41062.html鎴戜滑鍏堝畾涔変竴浜涘父瑙佺被鍨嬪彉閲忓熶互璇存槑

int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]="紼嬩僵鍚?;
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;

涓銆佸叾瀹冩暟鎹被鍨嬭漿鎹負瀛楃涓?/strong>

  • 鐭暣鍨?int)
    itoa(i,temp,10);///灝唅杞崲涓哄瓧絎︿覆鏀懼叆temp涓?鏈鍚庝竴涓暟瀛楄〃紺哄崄榪涘埗
    itoa(i,temp,2); ///鎸変簩榪涘埗鏂瑰紡杞崲
  • 闀挎暣鍨?long)
    ltoa(l,temp,10);
  • 嫻偣鏁?float,double)
    鐢╢cvt鍙互瀹屾垚杞崲,榪欐槸MSDN涓殑渚嬪瓙:
    int decimal, sign;
    char *buffer;
    double source = 3.1415926535;
    buffer = _fcvt( source, 7, &decimal, &sign );
    榪愯緇撴灉:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0
    decimal琛ㄧず灝忔暟鐐圭殑浣嶇疆,sign琛ㄧず絎﹀彿:0涓烘鏁幫紝1涓鴻礋鏁?
  • CString鍙橀噺
    str = "2008鍖椾含濂ヨ繍";
    buf = (LPSTR)(LPCTSTR)str;
  • BSTR鍙橀噺
    BSTR bstrValue = ::SysAllocString(L"紼嬪簭鍛?);
    char * buf = _com_util::ConvertBSTRToString(bstrValue);
    SysFreeString(bstrValue);
    AfxMessageBox(buf);
    delete(buf);
  • CComBSTR鍙橀噺
    CComBSTR bstrVar("test");
    char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str);
    AfxMessageBox(buf);
    delete(buf);
  • _bstr_t鍙橀噺
    _bstr_t綾誨瀷鏄BSTR鐨勫皝瑁咃紝鍥犱負宸茬粡閲嶈澆浜?鎿嶄綔絎︼紝鎵浠ュ緢瀹規槗浣跨敤
    _bstr_t bstrVar("test");
    const char *buf = bstrVar;///涓嶈淇敼buf涓殑鍐呭
    AfxMessageBox(buf);

  • 閫氱敤鏂規硶(閽堝闈濩OM鏁版嵁綾誨瀷)
    鐢╯printf瀹屾垚杞崲
    char  buffer[200];char  c = '1';int   i = 35;long  j = 1000;float f = 1.7320534f;sprintf( buffer, "%c",c);sprintf( buffer, "%d",i);sprintf( buffer, "%d",j);sprintf( buffer, "%f",f);

浜屻佸瓧絎︿覆杞崲涓哄叾瀹冩暟鎹被鍨?/font>
strcpy(temp,"123");

  • 鐭暣鍨?int)
    i = atoi(temp);
  • 闀挎暣鍨?long)
    l = atol(temp);
  • 嫻偣(double)
    d = atof(temp);
  • CString鍙橀噺
    CString name = temp;
  • BSTR鍙橀噺
    BSTR bstrValue = ::SysAllocString(L"紼嬪簭鍛?);
    ...///瀹屾垚瀵筨strValue鐨勪嬌鐢?br>SysFreeString(bstrValue);
  • CComBSTR鍙橀噺
    CComBSTR綾誨瀷鍙橀噺鍙互鐩存帴璧嬪?br>CComBSTR bstrVar1("test");
    CComBSTR bstrVar2(temp);
  • _bstr_t鍙橀噺
    _bstr_t綾誨瀷鐨勫彉閲忓彲浠ョ洿鎺ヨ祴鍊?br>_bstr_t bstrVar1("test");
    _bstr_t bstrVar2(temp);

涓夈佸叾瀹冩暟鎹被鍨嬭漿鎹㈠埌CString
浣跨敤CString鐨勬垚鍛樺嚱鏁癋ormat鏉ヨ漿鎹?渚嬪:

  • 鏁存暟(int)
    str.Format("%d",i);
  • 嫻偣鏁?float)
    str.Format("%f",i);
  • 瀛楃涓叉寚閽?char *)絳夊凡緇忚CString鏋勯犲嚱鏁版敮鎸佺殑鏁版嵁綾誨瀷鍙互鐩存帴璧嬪?br>str = username;
  • 瀵逛簬Format鎵涓嶆敮鎸佺殑鏁版嵁綾誨瀷錛屽彲浠ラ氳繃涓婇潰鎵璇寸殑鍏充簬鍏跺畠鏁版嵁綾誨瀷杞寲鍒癱har *鐨勬柟娉曞厛杞埌char *錛岀劧鍚庤祴鍊肩粰CString鍙橀噺銆?br>

鍥涖丅STR銆乢bstr_t涓嶤ComBSTR

  • CComBSTR 鏄疉TL瀵笲STR鐨勫皝瑁咃紝_bstr_t鏄疌++瀵笲STR鐨勫皝瑁?BSTR鏄?2浣嶆寚閽?浣嗗茍涓嶇洿鎺ユ寚鍚戝瓧涓茬殑緙撳啿鍖恒?br>char *杞崲鍒癇STR鍙互榪欐牱:
    BSTR b=_com_util::ConvertStringToBSTR("鏁版嵁");///浣跨敤鍓嶉渶瑕佸姞涓奵omutil.h鍜宑omsupp.lib
    SysFreeString(bstrValue);
    鍙嶄箣鍙互浣跨敤
    char *p=_com_util::ConvertBSTRToString(b);
    delete p;
    鍏蜂綋鍙互鍙傝冧竴錛屼簩孌佃惤閲岀殑鍏蜂綋璇存槑銆?br>
    CComBSTR涓巁bstr_t瀵瑰ぇ閲忕殑鎿嶄綔絎﹁繘琛屼簡閲嶈澆錛屽彲浠ョ洿鎺ヨ繘琛?,!=,==絳夋搷浣滐紝鎵浠ヤ嬌鐢ㄩ潪甯告柟渚褲?br>鐗瑰埆鏄痏bstr_t,寤鴻澶у浣跨敤瀹冦?br>

浜斻乂ARIANT 銆乢variant_t 涓?COleVariant

  • VARIANT鐨勭粨鏋勫彲浠ュ弬鑰冨ご鏂囦歡VC98\Include\OAIDL.H涓叧浜庣粨鏋勪綋tagVARIANT鐨勫畾涔夈?br>瀵逛簬VARIANT鍙橀噺鐨勮祴鍊鹼細棣栧厛緇檝t鎴愬憳璧嬪鹼紝鎸囨槑鏁版嵁綾誨瀷錛屽啀瀵硅仈鍚堢粨鏋勪腑鐩稿悓鏁版嵁綾誨瀷鐨勫彉閲忚祴鍊鹼紝涓句釜渚嬪瓙錛?br>VARIANT va;
    int a=2001;
    va.vt=VT_I4;///鎸囨槑鏁村瀷鏁版嵁
    va.lVal=a; ///璧嬪?br>
    瀵逛簬涓嶉┈涓婅祴鍊肩殑VARIANT錛屾渶濂藉厛鐢╒oid VariantInit(VARIANTARG FAR* pvarg);榪涜鍒濆鍖?鍏舵湰璐ㄦ槸灝唙t璁劇疆涓篤T_EMPTY,涓嬭〃鎴戜滑鍒椾婦vt涓庡父鐢ㄦ暟鎹殑瀵瑰簲鍏崇郴:

    Byte bVal; // VT_UI1.
    Short iVal; // VT_I2.
    long lVal; // VT_I4.
    float fltVal; // VT_R4.
    double dblVal; // VT_R8.
    VARIANT_BOOL boolVal; // VT_BOOL.
    SCODE scode; // VT_ERROR.
    CY cyVal; // VT_CY.
    DATE date; // VT_DATE.
    BSTR bstrVal; // VT_BSTR.
    DECIMAL FAR* pdecVal // VT_BYREF|VT_DECIMAL.
    IUnknown FAR* punkVal; // VT_UNKNOWN.
    IDispatch FAR* pdispVal; // VT_DISPATCH.
    SAFEARRAY FAR* parray; // VT_ARRAY|*.
    Byte FAR* pbVal; // VT_BYREF|VT_UI1.
    short FAR* piVal; // VT_BYREF|VT_I2.
    long FAR* plVal; // VT_BYREF|VT_I4.
    float FAR* pfltVal; // VT_BYREF|VT_R4.
    double FAR* pdblVal; // VT_BYREF|VT_R8.
    VARIANT_BOOL FAR* pboolVal; // VT_BYREF|VT_BOOL.
    SCODE FAR* pscode; // VT_BYREF|VT_ERROR.
    CY FAR* pcyVal; // VT_BYREF|VT_CY.
    DATE FAR* pdate; // VT_BYREF|VT_DATE.
    BSTR FAR* pbstrVal; // VT_BYREF|VT_BSTR.
    IUnknown FAR* FAR* ppunkVal; // VT_BYREF|VT_UNKNOWN.
    IDispatch FAR* FAR* ppdispVal; // VT_BYREF|VT_DISPATCH.
    SAFEARRAY FAR* FAR* pparray; // VT_ARRAY|*.
    VARIANT FAR* pvarVal; // VT_BYREF|VT_VARIANT.
    void FAR* byref; // Generic ByRef.
    char cVal; // VT_I1.
    unsigned short uiVal; // VT_UI2.
    unsigned long ulVal; // VT_UI4.
    int intVal; // VT_INT.
    unsigned int uintVal; // VT_UINT.
    char FAR * pcVal; // VT_BYREF|VT_I1.
    unsigned short FAR * puiVal; // VT_BYREF|VT_UI2.
    unsigned long FAR * pulVal; // VT_BYREF|VT_UI4.
    int FAR * pintVal; // VT_BYREF|VT_INT.
    unsigned int FAR * puintVal; //VT_BYREF|VT_UINT.

  • _variant_t鏄疺ARIANT鐨勫皝瑁呯被錛屽叾璧嬪煎彲浠ヤ嬌鐢ㄥ己鍒剁被鍨嬭漿鎹紝鍏舵瀯閫犲嚱鏁頒細鑷姩澶勭悊榪欎簺鏁版嵁綾誨瀷銆?br>浣跨敤鏃墮渶鍔犱笂#include <comdef.h>
    渚嬪錛?br>long l=222;
    ing i=100;
    _variant_t lVal(l);
    lVal = (long)i;

  • COleVariant鐨勪嬌鐢ㄤ笌_variant_t鐨勬柟娉曞熀鏈竴鏍鳳紝璇峰弬鑰冨涓嬩緥瀛愶細
    COleVariant v3 = "瀛楃涓?, v4 = (long)1999;
    CString str =(BSTR)v3.pbstrVal;
    long i = v4.lVal;

鍏佸叾瀹冧竴浜汣OM鏁版嵁綾誨瀷

  • 鏍規嵁ProgID寰楀埌CLSID
    HRESULT CLSIDFromProgID( LPCOLESTR lpszProgID,LPCLSID pclsid);
    CLSID clsid;
    CLSIDFromProgID( L"MAPI.Folder",&clsid);
  • 鏍規嵁CLSID寰楀埌ProgID
    WINOLEAPI ProgIDFromCLSID( REFCLSID clsid,LPOLESTR * lplpszProgID);
    渚嬪鎴戜滑宸茬粡瀹氫箟浜?CLSID_IApplication,涓嬮潰鐨勪唬鐮佸緱鍒癙rogID
    LPOLESTR pProgID = 0;
    ProgIDFromCLSID( CLSID_IApplication,&pProgID);
    ...///鍙互浣跨敤pProgID
    CoTaskMemFree(pProgID);//涓嶈蹇樿閲婃斁

涓冦丄NSI涓嶶nicode
Unicode縐頒負瀹藉瓧絎﹀瀷瀛椾覆,COM閲屼嬌鐢ㄧ殑閮芥槸Unicode瀛楃涓層?/font>

  • 灝咥NSI杞崲鍒癠nicode
    (1)閫氳繃L榪欎釜瀹忔潵瀹炵幇錛屼緥濡? CLSIDFromProgID( L"MAPI.Folder",&clsid);
    (2)閫氳繃MultiByteToWideChar鍑芥暟瀹炵幇杞崲,渚嬪:
    char *szProgID = "MAPI.Folder";
    WCHAR szWideProgID[128];
    CLSID clsid;
    long lLen = MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID));
    szWideProgID[lLen] = '\0';
    (3)閫氳繃A2W瀹忔潵瀹炵幇,渚嬪:
    USES_CONVERSION;
    CLSIDFromProgID( A2W(szProgID),&clsid);
  • 灝哢nicode杞崲鍒癆NSI
    (1)浣跨敤WideCharToMultiByte,渚嬪:
    // 鍋囪宸茬粡鏈変簡涓涓猆nicode 涓?wszSomeString...
    char szANSIString [MAX_PATH];
    WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL );
    (2)浣跨敤W2A瀹忔潵瀹炵幇,渚嬪:
    USES_CONVERSION;
    pTemp=W2A(wszSomeString);

鍏佸叾瀹?/strong>

  • 瀵規秷鎭殑澶勭悊涓垜浠粡甯擱渶瑕佸皢WPARAM鎴朙PARAM絳?2浣嶆暟鎹紙DWORD)鍒嗚В鎴愪袱涓?6浣嶆暟鎹紙WORD),渚嬪錛?br>LPARAM lParam;
    WORD loValue = LOWORD(lParam);///鍙栦綆16浣?br>WORD hiValue = HIWORD(lParam);///鍙栭珮16浣?br>
  • 瀵逛簬16浣嶇殑鏁版嵁(WORD)鎴戜滑鍙互鐢ㄥ悓鏍風殑鏂規硶鍒嗚В鎴愰珮浣庝袱涓?浣嶆暟鎹?BYTE),渚嬪:
    WORD wValue;
    BYTE loValue = LOBYTE(wValue);///鍙栦綆8浣?br>BYTE hiValue = HIBYTE(wValue);///鍙栭珮8浣?br>
  • 涓や釜16浣嶆暟鎹紙WORD錛夊悎鎴?2浣嶆暟鎹?DWORD,LRESULT,LPARAM,鎴朩PARAM)
    LONG MAKELONG( WORD wLow, WORD wHigh );
    WPARAM MAKEWPARAM( WORD wLow, WORD wHigh );
    LPARAM MAKELPARAM( WORD wLow, WORD wHigh );
    LRESULT MAKELRESULT( WORD wLow, WORD wHigh );

  • 涓や釜8浣嶇殑鏁版嵁(BYTE)鍚堟垚16浣嶇殑鏁版嵁(WORD)
    WORD MAKEWORD( BYTE bLow, BYTE bHigh );

  • 浠嶳(red),G(green),B(blue)涓夎壊寰楀埌COLORREF綾誨瀷鐨勯鑹插?br>COLORREF RGB( BYTE byRed,BYTE byGreen,BYTE byBlue );
    渚嬪COLORREF bkcolor = RGB(0x22,0x98,0x34);


  • 浠嶤OLORREF綾誨瀷鐨勯鑹插煎緱鍒癛GB涓変釜棰滆壊鍊?br>BYTE Red = GetRValue(bkcolor); ///寰楀埌綰㈤鑹?br>BYTE Green = GetGValue(bkcolor); ///寰楀埌緇塊鑹?br>BYTE Blue = GetBValue(bkcolor); ///寰楀埌鍏伴鑹?/span>

涔濄佹敞鎰忎簨欏?/strong>
鍋囧闇瑕佷嬌鐢ㄥ埌ConvertBSTRToString姝ょ被鍑芥暟,闇瑕佸姞涓婂ご鏂囦歡comutil.h,騫跺湪setting涓姞鍏omsupp.lib鎴栬呯洿鎺ュ姞涓?pragma comment( lib, "comsupp.lib" )



鏉庝簹 2008-01-12 23:07 鍙戣〃璇勮
]]>
CString涓庡叾浠栫被鍨嬬殑杞崲----CString瀛楃涓茶漿鎹㈢畫 http://m.shnenglu.com/lilac/archive/2008/01/12/41060.html鏉庝簹鏉庝簹Sat, 12 Jan 2008 15:00:00 GMThttp://m.shnenglu.com/lilac/archive/2008/01/12/41060.htmlhttp://m.shnenglu.com/lilac/comments/41060.htmlhttp://m.shnenglu.com/lilac/archive/2008/01/12/41060.html#Feedback0http://m.shnenglu.com/lilac/comments/commentRss/41060.htmlhttp://m.shnenglu.com/lilac/services/trackbacks/41060.html榪欓噷鍙槸浠嬬粛浜嗗緢甯歌鏂規硶,榪樻湁鍏朵粬鏂規硶涔熷彲浠ュ疄鐜扮浉鍏崇殑鍔熻兘!
1銆佸瓧絎︿覆涓庢暟鐨勮漿鎹細
atof(瀛楃涓?>double,int,long),itoa(int->瀛楃涓?,ltoa(long int->瀛楃涓?
double->CString鐨勬柟娉曪細CString::Format("%d", &dX);
 
2銆丆String to char*
//緇忚繃綾誨瀷寮哄埗杞崲錛屽彲浠ュ皢CString綾誨瀷杞崲鎴恈har*錛屼緥濡傦細
CString cStr = "Hello,world!";
char *zStr = (char*)(LPCTSTR)cStr;
褰撶劧錛岃繖鍙槸鏈蹇嵎鐨勪竴縐嶆柟娉曘傚洜涓篊String鑷甫涓涓嚱鏁板彲浠ュ皢CString瀵硅薄杞崲鎴恈onst char*錛屼篃灝辨槸LPCTSTR銆?br> 
3銆乧har* to CString
//char*綾誨瀷鍙互鐩存帴緇機String錛屽畬鎴愯嚜鍔ㄨ漿鎹紝渚嬪錛?br>char *zStr = "Hello,world!";
CString cStr = zStr;
 
4銆丆String to LPCSTR 
//灝咰String杞崲鎴怢PCSTR錛岄渶瑕佽幏寰桟String鐨勯暱搴String cStr=_T("Hello,world!");
int nLen = cStr.GetLength();
LPCSTR lpszBuf = cStr.GetBuffer(nLen);
 
5銆丆String to LPSTR
//榪欎釜鍜岀4涓妧宸ф槸涓鏍風殑錛屼緥濡傦細
CString cStr = _T("Hello,world!");
int nLen = str.GetLength();
LPSTR lpszBuf = str.GetBuffer(nLen);  

鏉庝簹 2008-01-12 23:00 鍙戣〃璇勮
]]>
[杞琞CString 鎿嶄綔鎸囧崡http://m.shnenglu.com/lilac/archive/2008/01/12/41059.html鏉庝簹鏉庝簹Sat, 12 Jan 2008 14:55:00 GMThttp://m.shnenglu.com/lilac/archive/2008/01/12/41059.htmlhttp://m.shnenglu.com/lilac/comments/41059.htmlhttp://m.shnenglu.com/lilac/archive/2008/01/12/41059.html#Feedback0http://m.shnenglu.com/lilac/comments/commentRss/41059.htmlhttp://m.shnenglu.com/lilac/services/trackbacks/41059.htmlCString 鏄竴縐嶅緢鏈夌敤鐨勬暟鎹被鍨嬨傚畠浠緢澶х▼搴︿笂綆鍖栦簡MFC涓殑璁稿鎿嶄綔錛屼嬌寰桵FC鍦ㄥ仛瀛楃涓叉搷浣滅殑鏃跺欐柟渚夸簡寰堝銆備笉綆℃庢牱錛屼嬌鐢–String鏈夊緢澶氱壒孌婄殑鎶宸э紝鐗瑰埆鏄浜庣函C鑳屾櫙涓嬭蛋鍑烘潵鐨勭▼搴忓憳鏉ヨ鏈夌偣闅句互瀛︿範銆傝繖綃囨枃绔犲氨鏉ヨ璁鴻繖浜涙妧宸с?br>銆銆浣跨敤CString鍙互璁╀綘瀵瑰瓧絎︿覆鐨勬搷浣滄洿鍔犵洿鎴簡褰撱傝繖綃囨枃绔犱笉鏄疌String鐨勫畬鍏ㄦ墜鍐岋紝浣嗗泭鎷簡澶ч儴鍒嗗父瑙佸熀鏈棶棰樸?/p>

榪欑瘒鏂囩珷鍖呮嫭浠ヤ笅鍐呭錛?
CString 瀵硅薄鐨勮繛鎺?/span>
鏍煎紡鍖栧瓧絎︿覆錛堝寘鎷?int 鍨嬭漿鍖栦負 CString 錛?/span>
CString 鍨嬭漿鍖栨垚 int 鍨?/span>
CString 鍨嬪拰 char* 綾誨瀷鐨勭浉浜掕漿鍖?/span>
  1.char* 杞寲鎴?CString
  2.CString 杞寲鎴?char* 涔嬩竴錛氫嬌鐢↙PCTSTR寮哄埗杞寲
  3.CString 杞寲鎴?char* 涔嬩簩錛氫嬌鐢–String瀵硅薄鐨凣etBuffer鏂規硶
  4.CString 杞寲鎴?char* 涔嬩笁: 鍜屾帶浠剁殑鎺ュ彛
  5.CString 鍨嬭漿鍖栨垚 BSTR 鍨嬶紱

BSTR 鍨嬭漿鍖栨垚 CString 鍨嬶紱
VARIANT 鍨嬭漿鍖栨垚 CString 鍨嬶紱
杞藉叆瀛楃涓茶〃璧勬簮錛?
CString 鍜屼復鏃跺璞★紱

CString 鐨勬晥鐜囷紱
鎬葷粨
涓嬮潰鎴戝垎鍒璁恒?/p>

 1銆丆String 瀵硅薄鐨勮繛鎺?/p>

銆銆鑳戒綋鐜板嚭 CString 綾誨瀷鏂逛究鎬х壒鐐圭殑涓涓柟闈㈠氨瀛楃涓茬殑榪炴帴錛屼嬌鐢?CString 綾誨瀷錛屼綘鑳藉緢鏂逛究鍦拌繛鎺ヤ袱涓瓧絎︿覆錛屾濡備笅闈㈢殑渚嬪瓙錛?/p>

CString gray("Gray");CString cat("Cat");CString graycat = gray + cat;
瑕佹瘮鐢ㄤ笅闈㈢殑鏂規硶濂藉緱澶氾細

char gray[] = "Gray";char cat[] = "Cat";char * graycat = malloc(strlen(gray) + strlen(cat) + 1);strcpy(graycat, gray);strcat(graycat, cat);
 2銆佹牸寮忓寲瀛楃涓?/p>

銆銆涓庡叾鐢?sprintf() 鍑芥暟鎴?wsprintf() 鍑芥暟鏉ユ牸寮忓寲涓涓瓧絎︿覆錛岃繕涓嶅鐢?CString 瀵硅薄鐨凢ormat()鏂規硶錛?/p>

CString s;s.Format(_T("The total is %d"), total);
銆銆鐢ㄨ繖縐嶆柟娉曠殑濂藉鏄綘涓嶇敤鎷呭績鐢ㄦ潵瀛樻斁鏍煎紡鍖栧悗鏁版嵁鐨勭紦鍐插尯鏄惁瓚沖澶э紝榪欎簺宸ヤ綔鐢盋String綾繪浛浣犲畬鎴愩?br>銆銆鏍煎紡鍖栨槸涓縐嶆妸鍏跺畠涓嶆槸瀛楃涓茬被鍨嬬殑鏁版嵁杞寲涓篊String綾誨瀷鐨勬渶甯哥敤鎶宸э紝姣斿錛屾妸涓涓暣鏁拌漿鍖栨垚CString綾誨瀷錛屽彲鐢ㄥ涓嬫柟娉曪細

CString s;s.Format(_T("%d"), total);
銆銆鎴戞繪槸瀵規垜鐨勫瓧絎︿覆浣跨敤_T()瀹忥紝榪欐槸涓轟簡璁╂垜鐨勪唬鐮佽嚦灝戞湁Unicode鐨勬剰璇嗭紝褰撶劧錛屽叧浜嶶nicode鐨勮瘽棰樹笉鍦ㄨ繖綃囨枃绔犵殑璁ㄨ鑼冨洿銆俖T()瀹忓湪8浣嶅瓧絎︾幆澧冧笅鏄涓嬪畾涔夌殑錛?/p>

#define _T(x) x // 闈濽nicode鐗堟湰錛坣on-Unicode version錛?br>鑰屽湪Unicode鐜涓嬫槸濡備笅瀹氫箟鐨勶細

#define _T(x) L##x // Unicode鐗堟湰錛圲nicode version錛?br>鎵浠ュ湪Unicode鐜涓嬶紝瀹冪殑鏁堟灉灝辯浉褰撲簬錛?/p>

s.Format(L"%d", total);
銆銆濡傛灉浣犺涓轟綘鐨勭▼搴忓彲鑳藉湪Unicode鐨勭幆澧冧笅榪愯錛岄偅涔堝紑濮嬪湪鎰忕敤 Unicode 緙栫爜銆傛瘮濡傝錛屼笉瑕佺敤 sizeof() 鎿嶄綔絎︽潵鑾峰緱瀛楃涓茬殑闀垮害錛屽洜涓哄湪Unicode鐜涓嬪氨浼氭湁2鍊嶇殑璇樊銆傛垜浠彲浠ョ敤涓浜涙柟娉曟潵闅愯棌Unicode鐨勪竴浜涚粏鑺傦紝姣斿鍦ㄦ垜闇瑕佽幏寰楀瓧絎﹂暱搴︾殑鏃跺欙紝鎴戜細鐢ㄤ竴涓彨鍋欴IM鐨勫畯錛岃繖涓畯鏄湪鎴戠殑dim.h鏂囦歡涓畾涔夌殑錛屾垜浼氬湪鎴戝啓鐨勬墍鏈夌▼搴忎腑閮藉寘鍚繖涓枃浠訛細

#define DIM(x) ( sizeof((x)) / sizeof((x)[0]) )
銆銆榪欎釜瀹忎笉浠呭彲浠ョ敤鏉ヨВ鍐砋nicode鐨勫瓧絎︿覆闀垮害鐨勯棶棰橈紝涔熷彲浠ョ敤鍦ㄧ紪璇戞椂瀹氫箟鐨勮〃鏍間笂錛屽畠鍙互鑾峰緱琛ㄦ牸鐨勯」鏁幫紝濡備笅錛?/p>

class Whatever { ... };Whatever data[] = {   { ... },    ...   { ... },};for(int i = 0; i < DIM(data); i++) // 鎵弿琛ㄦ牸瀵繪壘鍖歸厤欏廣?br>銆銆榪欓噷瑕佹彁閱掍綘鐨勫氨鏄竴瀹氳娉ㄦ剰閭d簺鍦ㄥ弬鏁頒腑闇瑕佺湡瀹炲瓧鑺傛暟鐨凙PI鍑芥暟璋冪敤錛屽鏋滀綘浼犻掑瓧絎︿釜鏁扮粰瀹冿紝瀹冨皢涓嶈兘姝e父宸ヤ綔銆傚涓嬶細
TCHAR data[20];lstrcpyn(data, longstring, sizeof(data) - 1); // WRONG!lstrcpyn(data, longstring, DIM(data) - 1); // RIGHTWriteFile(f, data, DIM(data), &bytesWritten, NULL); // WRONG!WriteFile(f, data, sizeof(data), &bytesWritten, NULL); // RIGHT
閫犳垚浠ヤ笂鍘熷洜鏄洜涓簂strcpyn闇瑕佷竴涓瓧絎︿釜鏁頒綔涓哄弬鏁幫紝浣嗘槸WriteFile鍗撮渶瑕佸瓧鑺傛暟浣滀負鍙傛暟銆?br>鍚屾牱闇瑕佹敞鎰忕殑鏄湁鏃跺欓渶瑕佸啓鍑烘暟鎹殑鎵鏈夊唴瀹廣傚鏋滀綘浠呬粎鍙兂鍐欏嚭鏁版嵁鐨勭湡瀹為暱搴︼紝浣犲彲鑳戒細璁や負浣犲簲璇ヨ繖鏍峰仛錛?/p>

WriteFile(f, data, lstrlen(data), &bytesWritten, NULL); // WRONG
浣嗘槸鍦║nicode鐜涓嬶紝瀹冧笉浼氭甯稿伐浣溿傛紜殑鍋氭硶搴旇鏄繖鏍鳳細

WriteFile(f, data, lstrlen(data) * sizeof(TCHAR), &bytesWritten, NULL); // RIGHT
銆銆鍥犱負WriteFile闇瑕佺殑鏄竴涓互瀛楄妭涓哄崟浣嶇殑闀垮害銆傦紙鍙兘鏈変簺浜轟細鎯?#8220;鍦ㄩ潪Unicode鐨勭幆澧冧笅榪愯榪欒浠g爜錛屽氨鎰忓懗鐫鎬繪槸鍦ㄥ仛涓涓浣欑殑涔?鎿嶄綔錛岃繖鏍蜂笉浼氶檷浣庣▼搴忕殑鏁堢巼鍚楋紵”榪欑鎯蟲硶鏄浣欑殑錛屼綘蹇呴』瑕佷簡瑙g紪璇戝櫒瀹為檯涓婂仛浜嗕粈涔堬紝娌℃湁鍝竴涓狢鎴朇++緙栬瘧鍣ㄤ細鎶婅繖縐嶆棤鑱婄殑涔?鎿嶄綔鐣欏湪浠g爜涓傚湪Unicode鐜涓嬭繍琛岀殑鏃跺欙紝浣犱篃涓嶅繀鎷呭績閭d釜涔?鎿嶄綔浼氶檷浣庣▼搴忕殑鏁堢巼錛岃浣忥紝榪欏彧鏄竴涓乏縐諱竴浣嶇殑鎿嶄綔鑰屽凡錛岀紪璇戝櫒涔熷緢涔愭剰涓轟綘鍋氳繖縐嶆浛鎹€傦級
銆銆浣跨敤_T瀹忓茍涓嶆槸鎰忓懗鐫浣犲凡緇忓垱寤轟簡涓涓猆nicode鐨勭▼搴忥紝浣犲彧鏄垱寤轟簡涓涓湁Unicode鎰忚瘑鐨勭▼搴忚屽凡銆傚鏋滀綘鍦ㄩ粯璁ょ殑8-bit妯″紡涓嬬紪璇戜綘鐨勭▼搴忕殑璇濓紝寰楀埌鐨勫皢鏄竴涓櫘閫氱殑8-bit鐨勫簲鐢ㄧ▼搴忥紙榪欓噷鐨?-bit鎸囩殑鍙槸8浣嶇殑瀛楃緙栫爜錛屽茍涓嶆槸鎸?浣嶇殑璁$畻鏈虹郴緇燂級錛涘綋浣犲湪Unicode鐜涓嬬紪璇戜綘鐨勭▼搴忔椂錛屼綘鎵嶄細寰楀埌涓涓猆nicode鐨勭▼搴忋傝浣忥紝CString 鍦?Unicode 鐜涓嬶紝閲岄潰鍖呭惈鐨勫彲閮芥槸16浣嶇殑瀛楃鍝︺?/p>

 3銆丆String 鍨嬭漿鍖栨垚 int 鍨?/p>

銆銆鎶?CString 綾誨瀷鐨勬暟鎹漿鍖栨垚鏁存暟綾誨瀷鏈綆鍗曠殑鏂規硶灝辨槸浣跨敤鏍囧噯鐨勫瓧絎︿覆鍒版暣鏁拌漿鎹緥紼嬨?br>銆銆铏界劧閫氬父浣犳鐤戜嬌鐢╛atoi()鍑芥暟鏄竴涓ソ鐨勯夋嫨錛屽畠涔熷緢灝戜細鏄竴涓紜殑閫夋嫨銆傚鏋滀綘鍑嗗浣跨敤 Unicode 瀛楃錛屼綘搴旇鐢╛ttoi()錛屽畠鍦?ANSI 緙栫爜緋葷粺涓緙栬瘧鎴恄atoi()錛岃屽湪 Unicode 緙栫爜緋葷粺涓紪璇戞垚_wtoi()銆備綘涔熷彲浠ヨ冭檻浣跨敤_tcstoul()鎴栬卂tcstol()錛屽畠浠兘鑳芥妸瀛楃涓茶漿鍖栨垚浠繪剰榪涘埗鐨勯暱鏁存暟錛堝浜岃繘鍒躲佸叓榪涘埗銆佸崄榪涘埗鎴栧崄鍏繘鍒訛級錛屼笉鍚岀偣鍦ㄤ簬鍓嶈呰漿鍖栧悗鐨勬暟鎹槸鏃犵鍙風殑錛坲nsigned錛夛紝鑰屽悗鑰呯浉鍙嶃傜湅涓嬮潰鐨勪緥瀛愶細

CString hex = _T("FAB");CString decimal = _T("4011");ASSERT(_tcstoul(hex, 0, 16) == _ttoi(decimal));
 4銆丆String 鍨嬪拰 char* 綾誨瀷鐨勭浉浜掕漿鍖?/p>

銆銆榪欐槸鍒濆鑰呬嬌鐢?CString 鏃舵渶甯歌鐨勯棶棰樸傛湁浜?C++ 鐨勫府鍔╋紝寰堝闂浣犱笉闇瑕佹繁鍏ョ殑鍘昏冭檻瀹冿紝鐩存帴鎷挎潵鐢ㄥ氨琛屼簡錛屼絾鏄鏋滀綘涓嶈兘娣卞叆浜嗚В瀹冪殑榪愯鏈哄埗錛屽張浼氭湁寰堝闂璁╀綘榪鋒儜錛岀壒鍒槸鏈変簺鐪嬭搗鏉ユ病鏈夐棶棰樼殑浠g爜錛屽嵈鍋忓亸涓嶈兘姝e父宸ヤ綔銆?br>姣斿錛屼綘浼氬鎬負浠涔堜笉鑳藉啓鍚戜笅闈㈣繖鏍風殑浠g爜鍛細

CString graycat = "Gray" + "Cat";
鎴栬呰繖鏍鳳細

CString graycat("Gray" + "Cat");
銆銆浜嬪疄涓婏紝緙栬瘧鍣ㄥ皢鎶辨ㄤ笂闈㈢殑榪欎簺灝濊瘯銆備負浠涔堝憿錛熷洜涓洪拡瀵笴String 鍜?LPCTSTR鏁版嵁綾誨瀷鐨勫悇縐嶅悇鏍風殑緇勫悎錛?#8220; +” 榪愮畻絎?琚畾涔夋垚涓涓噸杞芥搷浣滅銆傝屼笉鏄袱涓?LPCTSTR 鏁版嵁綾誨瀷錛屽畠鏄簳灞傛暟鎹被鍨嬨備綘涓嶈兘瀵瑰熀鏈暟鎹紙濡?int銆乧har 鎴栬?char*錛夌被鍨嬮噸杞?C++ 鐨勮繍綆楃銆備綘鍙互璞′笅闈㈣繖鏍峰仛錛?/p>

CString graycat = CString("Gray") + CString("Cat");
鎴栬呰繖鏍鳳細

CString graycat = CString("Gray") + "Cat";
鐮旂┒涓鐣氨浼氬彂鐜幫細“ +”鎬繪槸浣跨敤鍦ㄨ嚦灝戞湁涓涓?CString 瀵硅薄鍜屼竴涓?LPCSTR 鐨勫満鍚堛?/p>

娉ㄦ剰錛岀紪鍐欐湁 Unicode 鎰忚瘑鐨勪唬鐮佹繪槸涓浠跺ソ浜嬶紝姣斿錛?/p>

CString graycat = CString(_T("Gray")) + _T("Cat");
榪欏皢浣垮緱浣犵殑浠g爜鍙互鐩存帴縐繪銆?/p>

char* 杞寲涓?CString

銆銆鐜板湪浣犳湁涓涓?char* 綾誨瀷鐨勬暟鎹紝鎴栬呰涓涓瓧絎︿覆銆傛庝箞鏍峰垱寤?CString 瀵硅薄鍛紵榪欓噷鏈変竴浜涗緥瀛愶細

char * p = "This is a test";
鎴栬呰薄涓嬮潰榪欐牱鏇村叿鏈?Unicode 鎰忚瘑錛?/p>

TCHAR * p = _T("This is a test")
鎴?/p>

LPTSTR p = _T("This is a test");
浣犲彲浠ヤ嬌鐢ㄤ笅闈換鎰忎竴縐嶅啓娉曪細

CString s = "This is a test"; // 8-bit onlyCString s = _T("This is a test"); // Unicode-awareCString s("This is a test"); // 8-bit onlyCString s(_T("This is a test")); // Unicode-awareCString s = p;CString s(p);
銆銆鐢ㄨ繖浜涙柟娉曞彲浠ヨ交鏉懼皢甯擱噺瀛楃涓叉垨鎸囬拡杞崲鎴?CString銆傞渶瑕佹敞鎰忕殑鏄紝瀛楃鐨勮祴鍊兼繪槸琚嫹璐濆埌 CString 瀵硅薄涓幓鐨勶紝鎵浠ヤ綘鍙互璞′笅闈㈣繖鏍鋒搷浣滐細

TCHAR * p = _T("Gray");CString s(p);p = _T("Cat");s += p;
緇撴灉瀛楃涓茶偗瀹氭槸“GrayCat”銆?/p>

CString 綾昏繕鏈夊嚑涓叾瀹冪殑鏋勯犲嚱鏁幫紝浣嗘槸榪欓噷鎴戜滑涓嶈冭檻瀹冿紝濡傛灉浣犳湁鍏磋叮鍙互鑷繁鏌ョ湅鐩稿叧鏂囨。銆?/p>

浜嬪疄涓婏紝CString 綾葷殑鏋勯犲嚱鏁版瘮鎴戝睍紺虹殑瑕佸鏉傦紝姣斿錛?/p>

CString s = "This is a test";
銆銆榪欐槸寰堣崏鐜囩殑緙栫爜錛屼絾鏄疄闄呬笂瀹冨湪 Unicode 鐜涓嬭兘緙栬瘧閫氳繃銆傚畠鍦ㄨ繍琛屾椂璋冪敤鏋勯犲嚱鏁扮殑 MultiByteToWideChar 鎿嶄綔灝?8 浣嶅瓧絎︿覆杞崲鎴?16 浣嶅瓧絎︿覆銆備笉綆℃庢牱錛屽鏋?char * 鎸囬拡鏄綉緇滀笂浼犺緭鐨?8 浣嶆暟鎹紝榪欑杞崲鏄緢鏈夌敤鐨勩?/p>

CString 杞寲鎴?char* 涔嬩竴錛氬己鍒剁被鍨嬭漿鎹負 LPCTSTR錛?/p>

銆銆榪欐槸涓縐嶇暐寰‖鎬х殑杞崲錛屾湁鍏?#8220;姝g‘”鐨勫仛娉曪紝浜轟滑鍦ㄨ璇嗕笂榪樺瓨鍦ㄨ澶氭販涔憋紝姝g‘鐨勪嬌鐢ㄦ柟娉曟湁寰堝錛屼絾閿欒鐨勪嬌鐢ㄦ柟娉曞彲鑳戒笌姝g‘鐨勪嬌鐢ㄦ柟娉曚竴鏍峰銆?br>銆銆鎴戜滑棣栧厛瑕佷簡瑙?CString 鏄竴縐嶅緢鐗規畩鐨?C++ 瀵硅薄錛屽畠閲岄潰鍖呭惈浜嗕笁涓鹼細涓涓寚鍚戞煇涓暟鎹紦鍐插尯鐨勬寚閽堛佷竴涓槸璇ョ紦鍐蹭腑鏈夋晥鐨勫瓧絎﹁鏁頒互鍙婁竴涓紦鍐插尯闀垮害銆?鏈夋晥瀛楃鏁扮殑澶у皬鍙互鏄粠0鍒拌緙撳啿鏈澶ч暱搴﹀煎噺1涔嬮棿鐨勪換浣曟暟錛堝洜涓哄瓧絎︿覆緇撳熬鏈変竴涓狽ULL瀛楃錛夈傚瓧絎﹁鏁板拰緙撳啿鍖洪暱搴﹁宸у闅愯棌銆?br>銆銆闄ら潪浣犲仛涓浜涚壒孌婄殑鎿嶄綔錛屽惁鍒欎綘涓嶅彲鑳界煡閬撶粰CString瀵硅薄鍒嗛厤鐨勭紦鍐插尯鐨勯暱搴︺傝繖鏍鳳紝鍗充嬌浣犺幏寰椾簡璇?緙撳啿鐨勫湴鍧錛屼綘涔熸棤娉曟洿鏀瑰叾涓殑鍐呭錛屼笉鑳芥埅鐭瓧絎︿覆錛屼篃 緇濆娌℃湁鍔炴硶鍔犻暱瀹冪殑鍐呭錛屽惁鍒欑涓鏃墮棿灝變細鐪嬪埌婧㈠嚭銆?br>銆銆LPCTSTR 鎿嶄綔絎︼紙鎴栬呮洿鏄庣‘鍦拌灝辨槸 TCHAR * 鎿嶄綔絎︼級鍦?CString 綾諱腑琚噸杞戒簡錛岃鎿嶄綔絎︾殑瀹氫箟鏄繑鍥炵紦鍐插尯鐨勫湴鍧錛屽洜姝わ紝濡傛灉浣犻渶瑕佷竴涓寚鍚?CString 鐨?瀛楃涓叉寚閽堢殑璇濓紝鍙互榪欐牱鍋氾細


CString s("GrayCat");LPCTSTR p = s;
銆銆瀹冨彲浠ユ紜湴榪愯銆傝繖鏄敱C璇█鐨勫己鍒剁被鍨嬭漿鍖栬鍒欏疄鐜扮殑銆傚綋闇瑕佸己鍒剁被鍨嬭漿鍖栨椂錛孋++瑙勬祴瀹硅榪欑閫夋嫨銆傛瘮濡傦紝浣犲彲浠ュ皢錛堟誕鐐規暟錛夊畾涔変負灝嗘煇涓鏁?錛堟湁涓瀵規誕鐐規暟錛夎繘琛屽己鍒剁被鍨嬭漿鎹㈠悗鍙繑鍥炶澶嶆暟鐨勭涓涓誕鐐規暟錛堜篃灝辨槸鍏跺疄閮級銆傚彲浠ヨ薄涓嬮潰榪欐牱錛?/p>

Complex c(1.2f, 4.8f);float realpart = c;
濡傛灉(float)鎿嶄綔絎﹀畾涔夋紜殑璇濓紝閭d箞瀹為儴鐨勭殑鍊煎簲璇ユ槸1.2銆?br>銆銆榪欑寮哄埗杞寲閫傚悎鎵鏈夎繖縐嶆儏鍐碉紝渚嬪錛屼換浣曞甫鏈?LPCTSTR 綾誨瀷鍙傛暟鐨勫嚱鏁伴兘浼氬己鍒舵墽琛岃繖縐嶈漿鎹€?浜庢槸錛屼綘鍙兘鏈夎繖鏍蜂竴涓嚱鏁幫紙涔熻鍦ㄦ煇涓綘涔版潵鐨凞LL涓級錛?/p>

BOOL DoSomethingCool(LPCTSTR s);
浣犺薄涓嬮潰榪欐牱璋冪敤瀹冿細

CString file("c:\\myfiles\\coolstuff")BOOL result = DoSomethingCool(file);
銆銆瀹冭兘姝g‘榪愯銆傚洜涓?DoSomethingCool 鍑芥暟宸茬粡璇存槑浜嗛渶瑕佷竴涓?LPCTSTR 綾誨瀷鐨勫弬鏁幫紝鍥犳 LPCTSTR 琚簲鐢ㄤ簬璇ュ弬鏁幫紝鍦?MFC 涓氨鏄繑鍥炵殑涓插湴鍧銆?/p>

濡傛灉浣犺鏍煎紡鍖栧瓧絎︿覆鎬庝箞鍔炲憿錛?/p>

CString graycat("GrayCat");CString s;s.Format("Mew! I love %s", graycat);
銆銆娉ㄦ剰鐢變簬鍦ㄥ彲鍙樺弬鏁板垪琛ㄤ腑鐨勫鹼紙鍦ㄥ嚱鏁拌鏄庝腑鏄互“...”琛ㄧず鐨勶級騫舵病鏈夐殣鍚竴涓己鍒剁被鍨嬭漿鎹㈡搷浣滅銆備綘浼氬緱鍒頒粈涔堢粨鏋滃憿錛?br>銆銆涓涓護浜烘儕璁剁殑緇撴灉錛屾垜浠緱鍒扮殑瀹為檯緇撴灉涓叉槸錛?/p>

"Mew! I love GrayCat"銆?br>銆銆鍥犱負 MFC 鐨勮璁¤呬滑鍦ㄨ璁?CString 鏁版嵁綾誨瀷鏃墮潪甯稿皬蹇冿紝 CString 綾誨瀷琛ㄨ揪寮忔眰鍊煎悗鎸囧悜浜嗗瓧絎︿覆錛屾墍浠ヨ繖閲岀湅涓嶅埌浠諱綍璞?Format 鎴?sprintf 涓殑寮哄埗綾誨瀷杞崲錛屼綘浠嶇劧鍙互寰楀埌姝g‘鐨勮涓恒傛弿榪?CString 鐨勯檮鍔犳暟鎹疄闄呬笂鍦?CString 鍚嶄箟鍦板潃涔嬪悗銆?br>銆銆鏈変竴浠朵簨鎯呬綘鏄笉鑳藉仛鐨勶紝閭e氨鏄慨鏀瑰瓧絎︿覆銆傛瘮濡傦紝浣犲彲鑳戒細灝濊瘯鐢?#8220;,”浠f浛“.”錛堜笉瑕佸仛榪欐牱鐨勶紝濡傛灉浣犲湪涔庡浗闄呭寲闂錛屼綘搴旇浣跨敤鍗佽繘鍒惰漿鎹㈢殑 National Language Support 鐗規э紝錛夛紝涓嬮潰鏄釜綆鍗曠殑渚嬪瓙錛?/p>

CString v("1.00"); // 璐у竵閲戦錛屼袱浣嶅皬鏁癓PCTSTR p = v;p[lstrlen(p) - 3] = '','';
銆銆榪欐椂緙栬瘧鍣ㄤ細鎶ラ敊錛屽洜涓轟綘璧嬪間簡涓涓父閲忎覆銆傚鏋滀綘鍋氬涓嬪皾璇曪紝緙栬瘧鍣ㄤ篃浼氶敊錛?/p>

strcat(p, "each");
銆銆鍥犱負 strcat 鐨勭涓涓弬鏁板簲璇ユ槸 LPTSTR 綾誨瀷鐨勬暟鎹紝鑰屼綘鍗寸粰浜嗕竴涓?LPCTSTR銆?/p>

銆銆涓嶈璇曞浘閽昏繖涓敊璇秷鎭殑鐗涜灝栵紝榪欏彧浼氫嬌浣犺嚜宸遍櫡鍏ラ夯鐑︼紒

銆銆鍘熷洜鏄紦鍐叉湁涓涓鏁幫紝瀹冩槸涓嶅彲瀛樺彇鐨勶紙瀹冧綅浜?CString 鍦板潃涔嬩笅鐨勪竴涓殣钘忓尯鍩燂級錛屽鏋滀綘鏀瑰彉榪欎釜涓詫紝緙撳啿涓殑瀛楃璁℃暟涓嶄細鍙嶆槧鎵鍋氱殑淇敼銆傛澶栵紝濡傛灉瀛楃涓查暱搴︽伆濂芥槸璇ュ瓧絎︿覆鐗╃悊闄愬埗鐨勯暱搴︼紙姊㈠悗榪樹細璁插埌榪欎釜闂錛夛紝閭d箞鎵╁睍璇ュ瓧絎︿覆灝嗘敼鍐欑紦鍐蹭互澶栫殑浠諱綍鏁版嵁錛岄偅鏄綘鏃犳潈榪涜鍐欐搷浣滅殑鍐呭瓨錛堜笉瀵瑰悧錛燂級錛屼綘浼氭瘉鎹㈠潖涓嶅睘浜庝綘鐨勫唴瀛樸傝繖鏄簲鐢ㄧ▼搴忕湡姝g殑姝諱骸澶勬柟銆?/p>

CString杞寲鎴恈har* 涔嬩簩錛氫嬌鐢?CString 瀵硅薄鐨?GetBuffer 鏂規硶錛?/p>

銆銆濡傛灉浣犻渶瑕佷慨鏀?CString 涓殑鍐呭錛屽畠鏈変竴涓壒孌婄殑鏂規硶鍙互浣跨敤錛岄偅灝辨槸 GetBuffer錛屽畠鐨勪綔鐢ㄦ槸榪斿洖涓涓彲鍐欑殑緙撳啿鎸囬拡銆?濡傛灉浣犲彧鏄墦綆椾慨鏀瑰瓧絎︽垨鑰呮埅鐭瓧絎︿覆錛屼綘瀹屽叏鍙互榪欐牱鍋氾細

CString s(_T("File.ext"));LPTSTR p = s.GetBuffer();LPTSTR dot = strchr(p, ''.''); // OK, should have used s.Find...if(p != NULL)*p = _T(''\0'');s.ReleaseBuffer();
銆銆榪欐槸 GetBuffer 鐨勭涓縐嶇敤娉曪紝涔熸槸鏈綆鍗曠殑涓縐嶏紝涓嶇敤緇欏畠浼犻掑弬鏁幫紝瀹冧嬌鐢ㄩ粯璁ゅ?0錛屾剰鎬濇槸錛?#8220;緇欐垜榪欎釜瀛楃涓茬殑鎸囬拡錛屾垜淇濊瘉涓嶅姞闀垮畠”銆傚綋浣犺皟鐢?ReleaseBuffer 鏃訛紝瀛楃涓茬殑瀹為檯闀垮害浼氳閲嶆柊璁$畻錛岀劧鍚庡瓨鍏?CString 瀵硅薄涓?br>銆銆蹇呴』寮鴻皟涓鐐癸紝鍦?GetBuffer 鍜?ReleaseBuffer 涔嬮棿榪欎釜鑼冨洿錛屼竴瀹氫笉鑳戒嬌鐢ㄤ綘瑕佹搷浣滅殑榪欎釜緙撳啿鐨?CString 瀵硅薄鐨勪換浣曟柟娉曘傚洜涓?ReleaseBuffer 琚皟鐢ㄤ箣鍓嶏紝璇?CString 瀵硅薄鐨勫畬鏁存у緱涓嶅埌淇濋殰銆傜爺絀朵互涓嬩唬鐮侊細

CString s(...);LPTSTR p = s.GetBuffer();//... 榪欎釜鎸囬拡 p 鍙戠敓浜嗗緢澶氫簨鎯卛nt n = s.GetLength(); // 寰堢碂D!!!!! 鏈夊彲鑳界粰鍑洪敊璇殑絳旀!!!s.TrimRight(); // 寰堢碂!!!!! 涓嶈兘淇濊瘉鑳芥甯稿伐浣?!!!s.ReleaseBuffer(); // 鐜板湪搴旇 OKint m = s.GetLength(); // 榪欎釜緇撴灉鍙互淇濊瘉鏄紜殑銆俿.TrimRight(); // 灝嗘甯稿伐浣溿?br>銆銆鍋囪浣犳兂澧炲姞瀛楃涓茬殑闀垮害錛屼綘棣栧厛瑕佺煡閬撹繖涓瓧絎︿覆鍙兘浼氭湁澶氶暱錛屽ソ姣旀槸澹版槑瀛楃涓叉暟緇勭殑鏃跺欑敤錛?/p>

char buffer[1024];
琛ㄧず 1024 涓瓧絎︾┖闂磋凍浠ヨ浣犲仛浠諱綍鎯沖仛寰椾簨鎯呫傚湪 CString 涓笌涔嬫剰涔夌浉絳夌殑琛ㄧず娉曪細

LPTSTR p = s.GetBuffer(1024);
銆銆璋冪敤榪欎釜鍑芥暟鍚庯紝浣犱笉浠呰幏寰椾簡瀛楃涓茬紦鍐插尯鐨勬寚閽堬紝鑰屼笖鍚屾椂榪樿幏寰椾簡闀垮害鑷沖皯涓?1024 涓瓧絎︾殑絀洪棿錛堟敞鎰忥紝鎴戣鐨勬槸“瀛楃”錛岃屼笉鏄?#8220;瀛楄妭”錛屽洜涓?CString 鏄互闅愬惈鏂瑰紡鎰熺煡 Unicode 鐨勶級銆?br>銆銆鍚屾椂錛岃繕搴旇娉ㄦ剰鐨勬槸錛屽鏋滀綘鏈変竴涓父閲忎覆鎸囬拡錛岃繖涓覆鏈韓鐨勫艱瀛樺偍鍦ㄥ彧璇誨唴瀛樹腑錛屽鏋滆瘯鍥懼瓨鍌ㄥ畠錛屽嵆浣夸綘宸茬粡璋冪敤浜?GetBuffer 錛屽茍鑾峰緱涓涓彧璇誨唴瀛樼殑鎸囬拡錛屽瓨鍏ユ搷浣滀細澶辮觸錛屽茍鎶ュ憡瀛樺彇閿欒銆傛垜娌℃湁鍦?CString 涓婅瘉鏄庤繖涓鐐癸紝浣嗘垜鐪嬪埌榪囧ぇ鎶婄殑 C 紼嬪簭鍛樼粡甯哥姱榪欎釜閿欒銆?br>銆銆C 紼嬪簭鍛樻湁涓涓氱梾鏄垎閰嶄竴涓浐瀹氶暱搴︾殑緙撳啿錛屽瀹冭繘琛?sprintf 鎿嶄綔錛岀劧鍚庡皢瀹冭祴鍊肩粰涓涓?CString錛?/p>

char buffer[256];sprintf(buffer, "%......", args, ...); // ... 閮ㄥ垎鐪佺暐璁稿緇嗚妭CString s = buffer;
铏界劧鏇村ソ鐨勫艦寮忓彲浠ヨ繖涔堝仛錛?/p>

CString s;s.Format(_T("%...."), args, ...);
濡傛灉浣犵殑瀛楃涓查暱搴︿竾涓瓚呰繃 256 涓瓧絎︾殑鏃跺欙紝涓嶄細鐮村潖鍫嗘爤銆?/p>

銆銆鍙﹀涓涓父瑙佺殑閿欒鏄細鏃㈢劧鍥哄畾澶у皬鐨勫唴瀛樹笉宸ヤ綔錛岄偅涔堝氨閲囩敤鍔ㄦ佸垎閰嶅瓧鑺傦紝榪欑鍋氭硶寮婄鏇村ぇ錛?/p>

int len = lstrlen(parm1) + 13  lstrlen(parm2) + 10 + 100;char * buffer = new char[len];sprintf(buffer, "%s is equal to %s, valid data", parm1, parm2);CString s = buffer;......delete [] buffer;
瀹冨彲浠ヨ兘琚畝鍗曞湴鍐欐垚錛?/p>

CString s;s.Format(_T("%s is equal to %s, valid data"), parm1, parm2);
銆銆闇瑕佹敞鎰?sprintf 渚嬪瓙閮戒笉鏄?Unicode 灝辯華鐨勶紝灝界浣犲彲浠ヤ嬌鐢?tsprintf 浠ュ強鐢?_T() 鏉ュ寘鍥存牸寮忓寲瀛楃涓詫紝浣嗘槸鍩烘湰 鎬濊礬浠嶇劧鏄湪璧板集璺紝榪欒繖鏍峰緢瀹規槗鍑洪敊銆?/p>

CString to char * 涔嬩笁錛氬拰鎺т歡鐨勬帴鍙o紱

銆銆鎴戜滑緇忓父闇瑕佹妸涓涓?CString 鐨勫間紶閫掔粰涓涓帶浠訛紝姣斿錛孋TreeCtrl銆侻FC涓烘垜浠彁渚涗簡寰堝渚垮埄鏉ラ噸杞借繖涓搷浣滐紝浣嗘槸 鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝浣犱嬌鐢?#8220;鍘熷”褰㈠紡鐨勬洿鏂幫紝鍥犳闇瑕佸皢澧ㄦ煇涓覆鎸囬拡瀛樺偍鍒?TVINSERTITEMSTRUCT 緇撴瀯鐨?TVITEM 鎴愬憳涓傚涓嬶細

TVINSERTITEMSTRUCT tvi;CString s;// ... 涓簊璧嬩竴浜涘箋倀vi.item.pszText = s; // Compiler yells at you here// ... 濉啓tvi鐨勫叾浠栧煙HTREEITEM ti = c_MyTree.InsertItem(&tvi);
銆銆涓轟粈涔堢紪璇戝櫒浼氭姤閿欏憿錛熸槑鏄庣湅璧鋒潵寰堝畬緹庣殑鐢ㄦ硶鍟婏紒浣嗘槸浜嬪疄涓婂鏋滀綘鐪嬬湅 TVITEM 緇撴瀯鐨勫畾涔変綘灝變細鏄庣櫧錛屽湪 TVITEM 緇撴瀯涓?pszText 鎴愬憳鐨勫0鏄庡涓嬶細

LPTSTR pszText;int cchTextMax;
銆銆鍥犳錛岃祴鍊間笉鏄祴緇欎竴涓?LPCTSTR 綾誨瀷鐨勫彉閲忥紝鑰屼笖緙栬瘧鍣ㄦ棤娉曠煡閬撳浣曞皢璧嬪艱鍙ュ彸杈瑰己鍒惰漿鎹㈡垚 LPCTSTR銆傚ソ鍚э紝浣犺錛岄偅鎴戝氨鏀規垚榪欐牱錛?/p>

tvi.item.pszText = (LPCTSTR)s; //緙栬瘧鍣ㄤ緷鐒朵細鎶ラ敊銆?br>銆銆緙栬瘧鍣ㄤ箣鎵浠ヤ緷鐒舵姤閿欐槸鍥犱負浣犺瘯鍥炬妸涓涓?LPCTSTR 綾誨瀷鐨勫彉閲忚祴鍊肩粰涓涓?LPTSTR 綾誨瀷鐨勫彉閲忥紝榪欑鎿嶄綔鍦–鎴朇++涓槸琚姝㈢殑銆備綘涓嶈兘鐢ㄨ繖縐嶆柟娉?鏉ユ互鐢ㄥ父閲忔寚閽堜笌闈炲父閲忔寚閽堟蹇碉紝鍚﹀垯錛屼細鎵頒貢緙栬瘧鍣ㄧ殑浼樺寲鏈哄埗錛屼嬌涔嬩笉鐭ュ浣曚紭鍖栦綘鐨勭▼搴忋傛瘮濡傦紝濡傛灉浣犺繖涔堝仛錛?/p>

const int i = ...;//... do lots of stuff... = a[i]; // usage 1// ... lots more stuff... = a[i]; // usage 2
銆銆閭d箞錛岀紪璇戝櫒浼氫互涓烘棦鐒?i 鏄?const 錛屾墍浠?usage1鍜寀sage2鐨勫兼槸鐩稿悓鐨勶紝騫朵笖瀹冪敋鑷寵兘浜嬪厛璁$畻濂?usage1 澶勭殑 a[i] 鐨勫湴鍧錛岀劧鍚庝繚鐣欑潃鍦ㄥ悗闈㈢殑 usage2 澶勪嬌鐢紝鑰屼笉鏄噸鏂拌綆椼傚鏋滀綘鎸夊涓嬫柟寮忓啓鐨勮瘽錛?/p>

const int i = ...;int * p = &i;//... do lots of stuff... = a[i]; // usage 1// ... lots more stuff(*p)++; // mess over compiler''s assumption// ... and other stuff... = a[i]; // usage 2
銆銆緙栬瘧鍣ㄥ皢璁や負 i 鏄父閲忥紝浠庤?a[i] 鐨勪綅緗篃鏄父閲忥紝榪欐牱闂存帴鍦扮牬鍧忎簡鍏堝墠鐨勫亣璁俱傚洜姝わ紝浣犵殑紼嬪簭灝嗕細鍦?debug 緙栬瘧妯″紡錛堟病鏈変紭鍖栵級鍜?release 緙栬瘧妯″紡錛堝畬鍏ㄤ紭鍖栵級涓弽鏄犲嚭涓嶅悓鐨勮涓猴紝榪欑鎯呭喌鍙笉濂斤紝鎵浠ュ綋浣犺瘯鍥炬妸鎸囧悜 i 鐨勬寚閽堣祴鍊肩粰涓涓?鍙慨鏀圭殑寮曠敤鏃訛紝浼氳緙栬瘧鍣ㄨ瘖鏂負榪欐槸涓縐嶄吉閫犮傝繖灝辨槸涓轟粈涔堬紙LPCTSTR錛夊己鍒剁被鍨嬭漿鍖栦笉璧蜂綔鐢ㄧ殑鍘熷洜銆?br>銆銆涓轟粈涔堜笉鎶婅鎴愬憳澹版槑鎴?LPCTSTR 綾誨瀷鍛紵鍥犱負榪欎釜緇撴瀯琚敤浜庤鍐欐帶浠躲傚綋浣犲悜鎺т歡鍐欐暟鎹椂錛屾枃鏈寚閽堝疄闄呬笂琚綋鎴?LPCTSTR錛岃屽綋浣犱粠鎺т歡璇繪暟鎹?鏃訛紝浣犲繀欏繪湁涓涓彲鍐欑殑瀛楃涓層傝繖涓粨鏋勬棤娉曞尯鍒嗗畠鏄敤鏉ヨ榪樻槸鐢ㄦ潵鍐欍?/p>

鍥犳錛屼綘浼氬父甯稿湪鎴戠殑浠g爜涓湅鍒板涓嬬殑鐢ㄦ硶錛?/p>

tvi.item.pszText = (LPTSTR)(LPCTSTR)s;
銆銆瀹冩妸 CString 寮哄埗綾誨瀷杞寲鎴?LPCTSTR錛屼篃灝辨槸璇村厛鑾峰緱鏀瑰瓧絎︿覆鐨勫湴鍧錛岀劧鍚庡啀寮哄埗綾誨瀷杞寲鎴?LPTSTR錛屼互渚垮彲浠ュ涔嬭繘琛岃祴鍊兼搷浣溿?娉ㄦ剰榪欏彧鏈夊湪浣跨敤 Set 鎴?Insert 涔嬬被鐨勬柟娉曟墠鏈夋晥錛佸鏋滀綘璇曞浘鑾峰彇鏁版嵁錛屽垯涓嶈兘榪欎箞鍋氥?br>銆銆濡傛灉浣犳墦綆楄幏鍙栧瓨鍌ㄥ湪鎺т歡涓殑鏁版嵁錛屽垯鏂規硶紼嶆湁涓嶅悓錛屼緥濡傦紝瀵規煇涓?CTreeCtrl 浣跨敤 GetItem 鏂規硶錛屾垜鎯寵幏鍙栭」鐩殑鏂囨湰銆傛垜鐭ラ亾榪欎簺 鏂囨湰鐨勯暱搴︿笉浼氳秴榪?MY_LIMIT錛屽洜姝ゆ垜鍙互榪欐牱鍐欙細

TVITEM tvi;// ... assorted initialization of other fields of tvitvi.pszText = s.GetBuffer(MY_LIMIT);tvi.cchTextMax = MY_LIMIT;c_MyTree.GetItem(&tvi);s.ReleaseBuffer();
銆銆鍙互鐪嬪嚭鏉ワ紝鍏跺疄涓婇潰鐨勪唬鐮佸鎵鏈夌被鍨嬬殑 Set 鏂規硶閮介傜敤錛屼絾鏄茍涓嶉渶瑕佽繖涔堝仛錛屽洜涓烘墍鏈夌殑綾?Set 鏂規硶錛堝寘鎷?Insert鏂規硶錛変笉浼氭敼鍙樺瓧絎︿覆鐨勫唴瀹廣備絾鏄綋浣犻渶瑕佸啓 CString 瀵硅薄鏃訛紝蹇呴』淇濊瘉緙撳啿鏄彲鍐欑殑錛岃繖姝f槸 GetBuffer 鎵鍋氱殑浜嬫儏銆傚啀嬈″己璋冿細 涓鏃﹀仛浜嗕竴嬈?GetBuffer 璋冪敤錛岄偅涔堝湪璋冪敤 ReleaseBuffer 涔嬪墠涓嶈瀵硅繖涓?CString 瀵硅薄鍋氫換浣曟搷浣溿?/p>

 5銆丆String 鍨嬭漿鍖栨垚 BSTR 鍨?/p>

銆銆褰撴垜浠嬌鐢?ActiveX 鎺т歡緙栫▼鏃訛紝緇忓父闇瑕佺敤鍒板皢鏌愪釜鍊艱〃紺烘垚 BSTR 綾誨瀷銆侭STR 鏄竴縐嶈鏁板瓧絎︿覆錛孖ntel騫沖彴涓婄殑瀹藉瓧絎︿覆錛圲nicode錛夛紝騫朵笖 鍙互鍖呭惈宓屽叆鐨?NULL 瀛楃銆?/p>

浣犲彲浠ヨ皟鐢?CString 瀵硅薄鐨?AllocSysString 鏂規硶灝?CString 杞寲鎴?BSTR錛?/p>

CString s;s = ... ; // whateverBSTR b = s.AllocSysString();
銆銆鐜板湪鎸囬拡 b 鎸囧悜鐨勫氨鏄竴涓柊鍒嗛厤鐨?BSTR 瀵硅薄錛岃瀵硅薄鏄?CString 鐨勪竴涓嫹璐濓紝鍖呭惈緇堢粨 NULL瀛楃銆傜幇鍦ㄤ綘鍙互灝嗗畠浼犻掔粰浠諱綍闇瑕?BSTR 鐨勬帴鍙c傞氬父錛孊STR 鐢辨帴鏀跺畠鐨勭粍浠舵潵閲婃斁錛屽鏋滀綘闇瑕佽嚜宸遍噴鏀?BSTR 鐨勮瘽錛屽彲浠ヨ繖涔堝仛錛?/p>

::SysFreeString(b);
銆銆瀵逛簬濡備綍琛ㄧず浼犻掔粰 ActiveX 鎺т歡鐨勫瓧絎︿覆錛屽湪寰蔣鍐呴儴鏇句竴搴︿簤璁轟笉浼戯紝鏈鍚?Visual Basic 鐨勪漢鍗犱簡涓婇錛孊STR錛?#8220;Basic String”鐨勯瀛楁瘝緙╁啓錛夊氨鏄繖鍦轟簤璁虹殑緇撴灉銆?/p>

 6銆丅STR 鍨嬭漿鍖栨垚 CString 鍨?/p>

銆銆鐢變簬 BSTR 鏄鏁?Unicode 瀛楃涓詫紝浣犲彲浠ョ敤鏍囧噯杞崲鏂規硶鏉ュ垱寤?8 浣嶇殑 CString銆傚疄闄呬笂錛岃繖鏄?CString 鍐呭緩鐨勫姛鑳姐傚湪 CString 涓?鏈夌壒孌婄殑鏋勯犲嚱鏁板彲浠ユ妸 ANSI 杞寲鎴?Unicode錛屼篃鍙互鎶奤nicode 杞寲鎴?ANSI銆備綘鍚屾牱鍙互浠?VARIANT 綾誨瀷鐨勫彉閲忎腑鑾峰緱 BSTR 綾誨瀷鐨勫瓧絎︿覆錛孷ARIANT 綾誨瀷鏄?鐢卞悇縐?COM 鍜?Automation (鑷姩鍖?璋冪敤榪斿洖鐨勭被鍨嬨?/p>

渚嬪錛屽湪涓涓狝NSI紼嬪簭涓細

BSTR b;b = ...; // whateverCString s(b == NULL ? L"" : b)
銆銆瀵逛簬鍗曚釜鐨?BSTR 涓叉潵璇達紝榪欑鐢ㄦ硶鍙互宸ヤ綔寰楀緢濂斤紝榪欐槸鍥犱負 CString 鏈変竴涓壒孌婄殑鏋勯犲嚱鏁頒互LPCWSTR錛圔STR姝f槸榪欑綾誨瀷錛?涓哄弬鏁幫紝騫跺皢瀹冭漿鍖栨垚 ANSI 綾誨瀷銆備笓闂ㄦ鏌ユ槸蹇呴』鐨勶紝鍥犱負 BSTR 鍙兘涓虹┖鍊鹼紝鑰?CString 鐨勬瀯閫犲嚱鏁板浜?NULL 鍊兼儏鍐佃冭檻鐨勪笉鏄緢鍛ㄥ埌錛岋紙鎰熻阿 Brian Ross 鎸囧嚭榪欎竴鐐?錛夈傝繖縐嶇敤娉曚篃鍙兘澶勭悊鍖呭惈 NUL 緇堢粨瀛楃鐨勫崟瀛楃涓詫紱濡傛灉瑕佽漿鍖栧惈鏈夊涓?NULL 瀛楃 涓詫紝浣犲緱棰濆鍋氫竴浜涘伐浣滄墠琛屻傚湪 CString 涓唴宓岀殑 NULL 瀛楃閫氬父琛ㄧ幇涓嶅敖濡備漢鎰忥紝搴旇灝介噺閬垮厤銆?br>銆銆鏍規嵁 C/C++ 瑙勫垯錛屽鏋滀綘鏈変竴涓?LPWSTR錛岄偅涔堝畠鍒棤閫夋嫨錛屽彧鑳藉拰 LPCWSTR 鍙傛暟鍖歸厤銆?/p>

鍦?Unicode 妯″紡涓嬶紝瀹冪殑鏋勯犲嚱鏁版槸錛?/p>

CString::CString(LPCTSTR);
姝e涓婇潰鎵琛ㄧず鐨勶紝鍦?ANSI 妯″紡涓嬶紝瀹冩湁涓涓壒孌婄殑鏋勯犲嚱鏁幫細

CString::CString(LPCWSTR);
銆銆瀹冧細璋冪敤涓涓唴閮ㄧ殑鍑芥暟灝?Unicode 瀛楃涓茶漿鎹㈡垚 ANSI 瀛楃涓層傦紙鍦║nicode妯″紡涓嬶紝鏈変竴涓笓闂ㄧ殑鏋勯犲嚱鏁幫紝璇ュ嚱鏁版湁涓涓弬鏁版槸LPCSTR綾誨瀷鈥斺斾竴涓?浣?ANSI 瀛楃涓?鎸囬拡錛岃鍑芥暟灝嗗畠鍔犲涓?Unicode 鐨勫瓧絎︿覆錛侊級鍐嶆寮鴻皟錛氫竴瀹氳媯鏌?BSTR 鐨勫兼槸鍚︿負 NULL銆?br>銆銆鍙﹀榪樻湁涓涓棶棰橈紝姝e涓婃枃鎻愬埌鐨勶細BSTRs鍙互鍚湁澶氫釜鍐呭祵鐨凬ULL瀛楃錛屼絾鏄?CString 鐨勬瀯閫犲嚱鏁板彧鑳藉鐞嗘煇涓覆涓崟涓?NULL 瀛楃銆?涔熷氨鏄錛屽鏋滀覆涓惈鏈夊祵鍏ョ殑 NUL瀛楄妭錛孋String 灝嗕細璁$畻鍑洪敊璇殑涓查暱搴︺備綘蹇呴』鑷繁澶勭悊瀹冦傚鏋滀綘鐪嬬湅 strcore.cpp 涓殑鏋勯犲嚱鏁幫紝浣犱細鍙戠幇 瀹冧滑閮借皟鐢ㄤ簡lstrlen錛屼篃灝辨槸璁$畻瀛楃涓茬殑闀垮害銆?br>銆銆娉ㄦ剰浠?Unicode 鍒?ANSI 鐨勮漿鎹嬌鐢ㄥ甫涓撻棬鍙傛暟鐨?::WideCharToMultiByte錛屽鏋滀綘涓嶆兂浣跨敤榪欑榛樿鐨勮漿鎹㈡柟寮忥紝鍒欏繀欏葷紪鍐欒嚜宸辯殑杞寲浠g爜銆?br>銆銆濡傛灉浣犲湪 UNICODE 妯″紡涓嬬紪璇戜唬鐮侊紝浣犲彲浠ョ畝鍗曞湴鍐欐垚錛?/p>


CString convert(BSTR b){    if(b == NULL)        return CString(_T(""));    CString s(b); // in UNICODE mode    return s;}
銆銆濡傛灉鏄?ANSI 妯″紡錛屽垯闇瑕佹洿澶嶆潅鐨勮繃紼嬫潵杞崲銆傛敞鎰忚繖涓唬鐮佷嬌鐢ㄤ笌 ::WideCharToMultiByte 鐩稿悓鐨勫弬鏁板箋傛墍浠ヤ綘 鍙兘鍦ㄦ兂瑕佹敼鍙樿繖浜涘弬鏁拌繘琛岃漿鎹㈡椂浣跨敤璇ユ妧鏈備緥濡傦紝鎸囧畾涓嶅悓鐨勯粯璁ゅ瓧絎︼紝涓嶅悓鐨勬爣蹇楅泦絳夈?
CString convert(BSTR b){    CString s;    if(b == NULL)       return s; // empty for NULL BSTR#ifdef UNICODE    s = b;#else    LPSTR p = s.GetBuffer(SysStringLen(b) + 1);     ::WideCharToMultiByte(CP_ACP,            // ANSI Code Page                          0,                 // no flags                          b,                 // source widechar string                          -1,                // assume NUL-terminated                          p,                 // target buffer                          SysStringLen(b)+1, // target buffer length                          NULL,              // use system default char                          NULL);             // don''t care if default used    s.ReleaseBuffer();#endif    return s;}
銆銆鎴戝茍涓嶆媴蹇冨鏋?BSTR 鍖呭惈娌℃湁鏄犲皠鍒?8 浣嶅瓧絎﹂泦鐨?Unicode 瀛楃鏃朵細鍙戠敓浠涔堬紝鍥犱負鎴戞寚瀹氫簡::WideCharToMultiByte 鐨勬渶鍚庝袱涓弬鏁頒負 NULL銆傝繖灝辨槸浣犲彲鑳介渶瑕佹敼鍙樼殑鍦版柟銆?

 7銆乂ARIANT 鍨嬭漿鍖栨垚 CString 鍨?/p>

銆銆浜嬪疄涓婏紝鎴戜粠鏉ユ病鏈夎繖涔堝仛榪囷紝鍥犱負鎴戞病鏈夌敤 COM/OLE/ActiveX 緙栧啓榪囩▼搴忋備絾鏄垜鍦╩icrosoft.public.vc.mfc 鏂伴椈緇勪笂鐪嬪埌浜?Robert Quirk 鐨勪竴綃囧笘瀛愯皥鍒頒簡榪欑杞寲錛屾垜瑙夊緱鎶婁粬鐨勬枃绔犲寘鍚湪鎴戠殑鏂囩珷閲屾槸涓嶅お濂界殑鍋氭硶錛屾墍浠ュ湪榪欓噷澶氬仛涓浜涜В閲婂拰婕旂ず銆傚鏋滃拰浠栫殑鏂囩珷鏈夌浉瀛涚殑鍦版柟鍙兘鏄垜鐨勭枏蹇姐?br>銆銆VARIANT 綾誨瀷緇忓父鐢ㄦ潵緇?COM 瀵硅薄浼犻掑弬鏁幫紝鎴栬呮帴鏀朵粠 COM 瀵硅薄榪斿洖鐨勫箋備綘涔熻兘鑷繁緙栧啓榪斿洖 VARIANT 綾誨瀷鐨勬柟娉曪紝鍑芥暟榪斿洖浠涔堢被鍨?渚濊禆鍙兘錛堝茍涓斿父甯革級鏂規硶鐨勮緭鍏ュ弬鏁幫紙姣斿錛屽湪鑷姩鍖栨搷浣滀腑錛屼緷璧栦笌浣犺皟鐢ㄥ摢涓柟娉曘侷Dispatch::Invoke 鍙兘榪斿洖錛堥氳繃鍏朵竴涓弬鏁幫級涓涓?鍖呭惈鏈塀YTE銆乄ORD銆乫loat銆乨ouble銆乨ate銆丅STR 絳夌瓑 VARIANT 綾誨瀷鐨勭粨鏋滐紝錛堣瑙?MSDN 涓婄殑 VARIANT 緇撴瀯鐨勫畾涔夛級銆傚湪涓嬮潰鐨勪緥瀛愪腑錛屽亣璁?綾誨瀷鏄竴涓狟STR鐨勫彉浣擄紝涔熷氨鏄鍦ㄤ覆涓殑鍊兼槸閫氳繃 bsrtVal 鏉ュ紩鐢紝鍏朵紭鐐規槸鍦?ANSI 搴旂敤涓紝鏈変竴涓瀯閫犲嚱鏁頒細鎶?LPCWCHAR 寮曠敤鐨勫艱漿鎹負涓涓?CString錛堣 BSTR-to-CString 閮ㄥ垎錛夈傚湪 Unicode 妯″紡涓紝灝嗘垚涓烘爣鍑嗙殑 CString 鏋勯犲嚱鏁幫紝鍙傝瀵圭己鐪?:WideCharToMultiByte 杞崲鐨勫憡璇紝浠ュ強浣犺寰楁槸鍚﹀彲浠ユ帴鍙楋紙澶у鏁版儏鍐典笅錛屼綘浼氭弧鎰忕殑錛夈?br>VARIANT vaData;vaData = m_com.YourMethodHere();ASSERT(vaData.vt == VT_BSTR);CString strData(vaData.bstrVal);
浣犺繕鍙互鏍規嵁 vt 鍩熺殑涓嶅悓鏉ュ緩绔嬫洿閫氱敤鐨勮漿鎹緥紼嬨備負姝や綘鍙兘浼氳冭檻錛?/p>


CString VariantToString(VARIANT * va){    CString s;    switch(va->vt)      { /* vt */       case VT_BSTR:          return CString(vaData->bstrVal);       case VT_BSTR | VT_BYREF:          return CString(*vaData->pbstrVal);       case VT_I4:          s.Format(_T("%d"), va->lVal);          return s;       case VT_I4 | VT_BYREF:          s.Format(_T("%d"), *va->plVal);       case VT_R8:          s.Format(_T("%f"), va->dblVal);          return s;       ... 鍓╀笅鐨勭被鍨嬭漿鎹㈢敱璇昏呰嚜宸卞畬鎴?nbsp;      default:          ASSERT(FALSE); // unknown VARIANT type (this ASSERT is optional)          return CString("");      } /* vt */}
 8銆佽澆鍏ュ瓧絎︿覆琛ㄨ祫婧?/p>

銆銆濡傛灉浣犳兂鍒涘緩涓涓鏄撹繘琛岃璦鐗堟湰縐繪鐨勫簲鐢ㄧ▼搴忥紝浣犲氨涓嶈兘鍦ㄤ綘鐨勬簮浠g爜涓洿鎺ュ寘鍚湰鍦熻璦瀛楃涓?錛堜笅闈㈣繖浜涗緥瀛愭垜鐢ㄧ殑璇█閮芥槸鑻辮錛屽洜涓烘垜鐨勬湰鍦熻鏄嫳璇級錛屾瘮濡備笅闈㈣繖縐嶅啓娉曞氨寰堢碂錛?br>CString s = "There is an error";
銆銆浣犲簲璇ユ妸浣犳墍鏈夌壒瀹氳璦鐨勫瓧絎︿覆鍗曠嫭鎽嗘斁錛堣皟璇曚俊鎭佸湪鍙戝竷鐗堟湰涓笉鍑虹幇鐨勪俊鎭櫎澶栵級銆傝繖鎰忓懗鐫鍚戜笅闈㈣繖鏍峰啓姣旇緝濂斤細

s.Format(_T("%d - %s"), code, text);
銆銆鍦ㄤ綘鐨勭▼搴忎腑錛屾枃瀛楀瓧絎︿覆涓嶆槸璇█鏁忔劅鐨勩備笉綆℃庢牱錛屼綘蹇呴』寰堝皬蹇冿紝涓嶈浣跨敤涓嬮潰榪欐牱鐨勪覆錛?/p>

// fmt is "Error in %s file %s"http:// readorwrite is "reading" or "writing"s.Format(fmt, readorwrite, filename);
銆銆榪欐槸鎴戠殑鍒囪韓浣撲細銆傚湪鎴戠殑絎竴涓浗闄呭寲鐨勫簲鐢ㄧ▼搴忎腑鎴戠姱浜嗚繖涓敊璇紝灝界鎴戞噦寰瘋錛岀煡閬撳湪寰瘋鐨勮娉曚腑鍔ㄨ瘝鏀懼湪鍙ュ瓙鐨勬渶鍚庨潰錛屾垜浠殑寰峰浗鏂歸潰鐨勫彂琛屼漢榪樻槸鑻﹁嫤鐨勬姳鎬ㄤ粬浠笉寰椾笉鎻愬彇閭d簺涓嶅彲鎬濊鐨勫痙璇敊璇彁紺轟俊鎭劧鍚庨噸鏂版牸寮忓寲浠ヨ瀹冧滑鑳芥甯稿伐浣溿傛瘮杈冨ソ鐨勫姙娉曪紙涔熸槸鎴戠幇鍦ㄤ嬌鐢ㄧ殑鍔炴硶錛夋槸浣跨敤涓や釜瀛楃涓詫紝涓涓敤 浜庤錛屼竴涓敤浜庡啓錛屽湪浣跨敤鏃跺姞杞藉悎閫傜殑鐗堟湰錛屼嬌寰楀畠浠瀛楃涓插弬鏁版槸闈炴晱鎰熺殑銆備篃灝辨槸璇村姞杞芥暣涓牸寮忥紝鑰屼笉鏄姞杞戒覆“reading”錛?#8220;writing”錛?/p>

// fmt is "Error in reading file %s"http:// "Error in writing file %s"s.Format(fmt, filename);
銆銆涓瀹氳娉ㄦ剰錛屽鏋滀綘鏈夊ソ鍑犱釜鍦版柟闇瑕佹浛鎹紝浣犱竴瀹氳淇濊瘉鏇挎崲鍚庡彞瀛愮殑緇撴瀯涓嶄細鍑虹幇闂錛屾瘮濡傚湪鑻辮涓紝鍙互鏄富璇?瀹捐錛屼富璇?璋撹錛屽姩璇?瀹捐鐨勭粨鏋勭瓑絳夈?br>銆銆鍦ㄨ繖閲岋紝鎴戜滑騫朵笉璁ㄨ FormatMessage錛屽叾瀹炲畠姣?sprintf/Format 榪樿鏈変紭鍔匡紝浣嗘槸涓嶅お瀹規槗鍜孋String 緇撳悎浣跨敤銆傝В鍐寵繖縐嶉棶棰樼殑鍔炴硶灝辨槸鎴戜滑鎸夌収鍙傛暟鍑虹幇鍦ㄥ弬鏁拌〃涓殑浣嶇疆緇欏弬鏁板彇鍚嶅瓧錛岃繖鏍峰湪浣犺緭鍑虹殑鏃跺欏氨涓嶄細鎶婁粬浠殑浣嶇疆鎺掗敊浜嗐?br>銆銆鎺ヤ笅鏉ユ垜浠璁烘垜浠繖浜涚嫭绔嬬殑瀛楃涓叉斁鍦ㄤ粈涔堝湴鏂廣傛垜浠彲浠ユ妸瀛楃涓茬殑鍊兼斁鍏ヨ祫婧愭枃浠朵腑鐨勪竴涓О涓?STRINGTABLE 鐨勬涓傝繃紼嬪涓嬶細棣栧厛浣跨敤 Visual Studio 鐨勮祫婧愮紪杈戝櫒鍒涘緩涓涓瓧絎︿覆錛岀劧鍚庣粰姣忎竴涓瓧絎︿覆鍙栦竴涓狪D錛屼竴鑸垜浠粰瀹冨彇鍚嶅瓧閮戒互 IDS_寮澶淬傛墍浠ュ鏋滀綘鏈変竴涓俊鎭紝浣犲彲浠ュ垱寤轟竴涓瓧絎︿覆璧勬簮鐒跺悗鍙栧悕涓?IDS_READING_FILE錛屽彟澶栦竴涓氨鍙栧悕涓?IDS_WRITING_FILE銆傚畠浠互涓嬮潰鐨勫艦寮忓嚭鐜板湪浣犵殑 .rc 鏂囦歡涓細

STRINGTABLEIDS_READING_FILE "Reading file %s"IDS_WRITING_FILE "Writing file %s"END
娉ㄦ剰錛氳繖浜涜祫婧愰兘浠?Unicode 鐨勬牸寮忎繚瀛橈紝涓嶇浣犳槸鍦ㄤ粈涔堢幆澧冧笅緙栬瘧銆備粬浠湪Win9x緋葷粺涓婁篃鏄互Unicode 鐨勫艦寮忓瓨鍦紝铏界劧 Win9x 涓嶈兘鐪熸澶勭悊 Unicode銆?br>鐒跺悗浣犲彲浠ヨ繖鏍蜂嬌鐢ㄨ繖浜涜祫婧愶細
// 鍦ㄤ嬌鐢ㄨ祫婧愪覆琛ㄤ箣鍓嶏紝紼嬪簭鏄繖鏍峰啓鐨勶細


   CString fmt;      if(...)        fmt = "Reading file %s";     else       fmt = "Writing file %s";  ...    // much later  CString s;  s.Format(fmt, filename);
// 浣跨敤璧勬簮涓茶〃涔嬪悗錛岀▼搴忚繖鏍峰啓錛?
    CString fmt;        if(...)           fmt.LoadString(IDS_READING_FILE);        else           fmt.LoadString(DS_WRITING_FILE);    ...      // much later    CString s;    s.Format(fmt, filename);
銆銆鐜板湪錛屼綘鐨勪唬鐮佸彲浠ョЩ妞嶅埌浠諱綍璇█涓幓銆侺oadString 鏂規硶闇瑕佷竴涓瓧絎︿覆璧勬簮鐨?ID 浣滀負鍙傛暟錛岀劧鍚庡畠浠?STRINGTABLE 涓彇鍑哄畠瀵瑰簲鐨勫瓧絎︿覆錛岃祴鍊肩粰 CString 瀵硅薄銆?CString 瀵硅薄鐨勬瀯閫犲嚱鏁拌繕鏈変竴涓洿鍔犺仾鏄庣殑鐗瑰緛鍙互綆鍖?STRINGTABLE 鐨勪嬌鐢ㄣ傝繖涓敤娉曞湪 CString::CString 鐨勬枃妗d腑娌℃湁鎸囧嚭錛屼絾鏄湪 鏋勯犲嚱鏁扮殑紺轟緥紼嬪簭涓嬌鐢ㄤ簡銆傦紙涓轟粈涔堣繖涓壒鎬ф病鏈夋垚涓烘寮忔枃妗g殑涓閮ㄥ垎錛岃屾槸鏀懼湪浜嗕竴涓緥瀛愪腑錛屾垜璁頒笉寰椾簡錛侊級鈥斺斻愯瘧鑰呮敞錛氫粠榪欏彞璇濈湅錛屼綔鑰呭彲鑳芥槸CString鐨勮璁¤呫傚叾瀹炲墠闈㈣繕鏈変竴鍙ョ被浼肩殑璇濄傝浠栨病鏈夊浣跨敤GetBuffer(0)鑾峰緱鐨勬寚閽堟寚鍚戠殑鍦板潃鏄惁鍙鍋氭湁鏁堟ф鏌?銆戙傝繖涓壒寰佸氨鏄細濡傛灉浣犲皢涓涓瓧絎︿覆璧勬簮鐨処D寮哄埗綾誨瀷杞崲涓?LPCTSTR錛屽皢浼氶殣鍚皟鐢?LoadString銆傚洜姝わ紝涓嬮潰涓や釜鏋勯犲瓧絎︿覆鐨勪緥瀛愬叿鏈夌浉鍚岀殑鏁堟灉錛岃屼笖鍏?ASSERT 鍦╠ebug妯″紡涓嬩笉浼氳瑙﹀彂錛?br>CString s;s.LoadString(IDS_WHATEVER);CString t( (LPCTSTR)IDS_WHATEVER );ASSERT(s == t);//涓嶄細琚Е鍙戯紝璇存槑s鍜宼鏄浉鍚岀殑銆?br>銆銆鐜板湪錛屼綘鍙兘浼氭兂錛氳繖鎬庝箞鍙兘宸ヤ綔鍛紵鎴戜滑鎬庝箞鑳芥妸 STRINGTABLE ID 杞寲鎴愪竴涓寚閽堝憿錛熷緢綆鍗曪細鎵鏈夌殑瀛楃涓?ID 閮藉湪1~65535榪欎釜鑼冨洿鍐咃紝涔熷氨鏄錛屽畠鎵鏈夌殑楂樹綅閮芥槸0錛岃屾垜浠湪紼嬪簭涓墍浣跨敤鐨勬寚閽堟槸涓嶅彲鑳藉皬浜?5535鐨勶紝鍥犱負紼嬪簭鐨勪綆 64K 鍐呭瓨姘歌繙涔熶笉鍙兘瀛樺湪鐨勶紝濡傛灉浣犺瘯鍥捐闂?x00000000鍒?x0000FFFF涔嬮棿鐨勫唴瀛橈紝灝嗕細寮曞彂涓涓唴瀛樿秺鐣岄敊璇傛墍浠ヨ1~65535鐨勫間笉鍙兘鏄竴涓唴瀛樺湴鍧錛屾墍浠ユ垜浠彲浠ョ敤榪欎簺鍊兼潵浣滀負瀛楃涓茶祫婧愮殑ID銆?br>銆銆鎴戝懼悜浜庝嬌鐢?MAKEINTRESOURCE 瀹忔樉寮忓湴鍋氳繖縐嶈漿鎹€傛垜璁や負榪欐牱鍙互璁╀唬鐮佹洿鍔犳槗浜庨槄璇匯傝繖鏄釜鍙傚悎鍦?MFC 涓嬌鐢ㄧ殑鏍囧噯瀹忋備綘瑕佽浣忥紝澶у鏁扮殑鏂規硶鍗沖彲浠ユ帴鍙椾竴涓?UINT 鍨嬬殑鍙傛暟錛屼篃鍙互鎺ュ彈涓涓?LPCTSTR 鍨嬬殑鍙傛暟錛岃繖鏄緷璧?C++ 鐨勯噸杞藉姛鑳藉仛鍒扮殑銆侰++閲嶈澆鍑芥暟甯︽潵鐨?寮婄灝辨槸閫犳垚鎵鏈夌殑寮哄埗綾誨瀷杞寲閮介渶瑕佹樉紺哄0鏄庛傚悓鏍鳳紝浣犱篃鍙互緇欏緢澶氱緇撴瀯鍙紶閫掍竴涓祫婧愬悕銆?/p>

CString s;s.LoadString(IDS_WHATEVER);CString t( MAKEINTRESOURCE(IDS_WHATEVER));ASSERT(s == t);
銆銆鍛婅瘔浣犲惂錛氭垜涓嶄粎鍙槸鍦ㄨ繖閲岄紦鍚癸紝浜嬪疄涓婃垜涔熸槸榪欎箞鍋氱殑銆傚湪鎴戠殑浠g爜涓紝浣犲嚑涔庝笉鍙兘鎵懼埌涓涓瓧絎︿覆錛屽綋鐒訛紝閭d簺鍙槸鍋剁劧鍦ㄨ皟璇曚腑鍑虹幇鐨勬垨鑰呭拰璇█鏃犲叧鐨勫瓧絎︿覆闄ゅ銆?/p>

 9銆丆String 鍜屼復鏃跺璞?/p>

銆銆榪欐槸鍑虹幇鍦?microsoft.public.vc.mfc 鏂伴椈緇勪腑鐨勪竴涓皬闂錛屾垜綆鍗曠殑鎻愪竴涓嬶紝榪欎釜闂鏄湁涓▼搴忓憳闇瑕佸線娉ㄥ唽琛ㄤ腑鍐欏叆涓涓瓧絎︿覆錛屼粬鍐欓亾錛?br>銆銆鎴戣瘯鐫鐢?RegSetValueEx() 璁劇疆涓涓敞鍐岃〃閿殑鍊鹼紝浣嗘槸瀹冪殑緇撴灉鎬繪槸浠ゆ垜鍥版儜銆傚綋鎴戠敤char[]澹版槑涓涓彉閲忔椂瀹冭兘姝e父宸ヤ綔錛屼絾鏄綋鎴戠敤 CString 鐨勬椂鍊欙紝鎬繪槸寰楀埌涓浜涘瀮鍦撅細"&Yacute;&Yacute;&Yacute;&Yacute;...&Yacute;&Yacute;&Yacute;&Yacute;&Yacute;&Yacute;"涓轟簡紜鏄笉鏄垜鐨?CString 鏁版嵁鍑轟簡闂錛屾垜璇曠潃鐢?GetBuffer錛岀劧鍚庡己鍒惰漿鍖栨垚 char*錛孡PCSTR銆侴etBuffer 榪斿洖鐨勫兼槸姝g‘鐨勶紝浣嗘槸褰撴垜鎶婂畠璧嬪肩粰 char* 鏃訛紝瀹冨氨鍙樻垚鍨冨溇浜嗐備互涓嬫槸鎴戠殑紼嬪簭孌碉細

char* szName = GetName().GetBuffer(20);RegSetValueEx(hKey, "Name", 0, REG_SZ,              (CONST BYTE *) szName,             strlen (szName + 1));
榪欎釜 Name 瀛楃涓茬殑闀垮害灝忎簬 20錛屾墍浠ユ垜涓嶈涓烘槸 GetBuffer 鐨勫弬鏁扮殑闂銆?/p>

鐪熻浜哄洶鎯戯紝璇峰府甯垜銆?/p>

浜茬埍鐨?Frustrated錛?/p>

浣犵姱浜嗕竴涓浉褰撳井濡欑殑閿欒錛岃仾鏄庡弽琚仾鏄庤錛屾紜殑浠g爜搴旇璞′笅闈㈣繖鏍鳳細


CString Name = GetName();RegSetValueEx(hKey, _T("Name"), 0, REG_SZ,                     (CONST BYTE *) (LPCTSTR)Name,                    (Name.GetLength() + 1) * sizeof(TCHAR));
銆銆涓轟粈涔堟垜鍐欑殑浠g爜鑳借鑰屼綘鍐欑殑灝辨湁闂鍛紵涓昏鏄洜涓哄綋浣犺皟鐢?GetName 鏃惰繑鍥炵殑 CString 瀵硅薄鏄竴涓復鏃跺璞°傚弬瑙侊細銆奀++ Reference manual銆?#167;12.2
銆銆鍦ㄤ竴浜涚幆澧冧腑錛岀紪璇戝櫒鏈夊繀瑕佸垱寤轟竴涓復鏃跺璞★紝榪欐牱寮曞叆涓存椂瀵硅薄鏄緷璧栦簬瀹炵幇鐨勩傚鏋滅紪璇戝櫒寮曞叆鐨勮繖涓復鏃跺璞℃墍灞炵殑綾繪湁鏋勯犲嚱鏁扮殑璇濓紝緙栬瘧鍣ㄨ紜繚榪欎釜綾葷殑鏋勯犲嚱鏁拌璋冪敤銆傚悓鏍風殑錛屽鏋滆繖涓被澹版槑鏈夋瀽鏋勫嚱鏁扮殑璇濓紝涔熻淇濊瘉榪欎釜涓存椂瀵硅薄鐨勬瀽鏋勫嚱鏁拌璋冪敤銆?br>銆銆緙栬瘧鍣ㄥ繀欏諱繚璇佽繖涓復鏃跺璞¤閿姣佷簡銆傝閿姣佺殑紜垏鍦扮偣渚濊禆浜庡疄鐜?....榪欎釜鏋愭瀯鍑芥暟蹇呴』鍦ㄩ鍑哄垱寤鴻涓存椂瀵硅薄鐨勮寖鍥翠箣鍓嶈璋冪敤銆?br>銆銆澶ч儴鍒嗙殑緙栬瘧鍣ㄦ槸榪欐牱璁捐鐨勶細鍦ㄤ復鏃跺璞¤鍒涘緩鐨勪唬鐮佺殑涓嬩竴涓墽琛屾楠ゅ闅愬惈璋冪敤榪欎釜涓存椂瀵硅薄鐨勬瀽鏋勫嚱鏁幫紝瀹炵幇璧鋒潵錛屼竴鑸兘鏄湪涓嬩竴涓垎鍙峰銆傚洜姝わ紝榪欎釜 CString 瀵硅薄鍦?GetBuffer 璋冪敤涔嬪悗灝辮鏋愭瀯浜嗭紙欏轟究鎻愪竴鍙ワ紝浣犳病鏈夌悊鐢辯粰 GetBuffer 鍑芥暟浼犻掍竴涓弬鏁幫紝鑰屼笖娌℃湁浣跨敤ReleaseBuffer 涔熸槸涓嶅鐨勶級銆傛墍浠?GetBuffer 鏈潵榪斿洖鐨勬槸鎸囧悜榪欎釜涓存椂瀵硅薄涓瓧絎︿覆鐨勫湴鍧鐨勬寚閽堬紝浣嗘槸褰撹繖涓復鏃跺璞¤鏋愭瀯鍚庯紝榪欏潡鍐呭瓨灝辮閲婃斁浜嗐傜劧鍚?MFC 鐨勮皟璇曞唴瀛樺垎閰嶅櫒浼氶噸鏂頒負榪欏潡鍐呭瓨鍏ㄩ儴濉笂 0xDD錛屾樉紺哄嚭鏉ュ垰濂藉氨鏄?#8220;&Yacute;”絎﹀彿銆傚湪榪欎釜鏃跺欎綘鍚戞敞鍐岃〃涓啓鏁版嵁錛屽瓧絎︿覆鐨勫唴瀹瑰綋鐒跺叏琚牬鍧忎簡銆?br>銆銆鎴戜滑涓嶅簲璇ョ珛鍗蟲妸榪欎釜涓存椂瀵硅薄杞寲鎴?char* 綾誨瀷錛屽簲璇ュ厛鎶婂畠淇濆瓨鍒頒竴涓?CString 瀵硅薄涓紝榪欐剰鍛崇潃鎶婁復鏃跺璞″鍒朵簡涓浠斤紝鎵浠ュ綋涓存椂鐨?CString 瀵硅薄琚瀽鏋勪簡涔嬪悗錛岃繖涓?CString 瀵硅薄涓殑鍊間緷鐒朵繚瀛樼潃銆傝繖涓椂鍊欏啀鍚戞敞鍐岃〃涓啓鏁版嵁灝辨病鏈夐棶棰樹簡銆?br>銆銆姝ゅ錛屾垜鐨勪唬鐮佹槸鍏鋒湁 Unicode 鎰忚瘑鐨勩傞偅涓搷浣滄敞鍐岃〃鐨勫嚱鏁伴渶瑕佷竴涓瓧鑺傚ぇ灝忥紝浣跨敤lstrlen(Name+1) 寰楀埌鐨勫疄闄呯粨鏋滃浜?Unicode 瀛楃鏉ヨ姣?ANSI 瀛楃瑕佸皬涓鍗婏紝鑰屼笖瀹冧篃涓嶈兘浠庤繖涓瓧絎︿覆鐨勭浜屼釜瀛楃璧峰紑濮嬭綆楋紝涔熻浣犵殑鏈剰鏄?lstrlen(Name) + 1錛圤K錛屾垜鎵胯錛屾垜涔熺姱浜嗗悓鏍風殑閿欒錛侊級銆備笉璁哄浣曪紝鍦?Unicode 妯″紡涓嬶紝鎵鏈夌殑瀛楃閮芥槸2涓瓧鑺傚ぇ灝忥紝鎴戜滑闇瑕佸鐞嗚繖涓棶棰樸傚井杞殑鏂囨。浠や漢鎯婅鍦板姝や繚鎸佺紕榛橈細REG_SZ 鐨勫肩┒绔熸槸浠ュ瓧鑺傝綆楄繕鏄互瀛楃璁$畻鍛紵鎴戜滑鍋囪瀹冩寚鐨勬槸浠ュ瓧鑺備負鍗曚綅璁$畻錛屼綘闇瑕佸浣犵殑浠g爜鍋氫竴浜涗慨鏀規潵璁$畻榪欎釜瀛楃涓叉墍鍚湁鐨勫瓧鑺傚ぇ灝忋?/p>

 10銆丆String 鐨勬晥鐜?/p>

銆銆CString 鐨勪竴涓棶棰樻槸瀹冪‘瀹炴帺钘忎簡涓浜涗綆鏁堢巼鐨勪笢瑗褲備粠鍙﹀涓涓柟闈㈣錛屽畠涔熺‘瀹炲彲浠ヨ瀹炵幇寰楁洿鍔犻珮鏁堬紝浣犲彲鑳戒細璇翠笅闈㈢殑浠g爜錛?br>CString s = SomeCString1;s += SomeCString2;s += SomeCString3;s += ",";s += SomeCString4;
姣旇搗涓嬮潰鐨勪唬鐮佹潵錛屾晥鐜囪浣庡浜嗭細

char s[1024];lstrcpy(s, SomeString1);lstrcat(s, SomeString2);lstrcat(s, SomeString 3);lstrcat(s, ",");lstrcat(s, SomeString4);
銆銆鎬諱箣錛屼綘鍙兘浼氭兂錛岄鍏堬紝瀹冧負 SomeCString1 鍒嗛厤涓鍧楀唴瀛橈紝鐒跺悗鎶?SomeCString1 澶嶅埗鍒伴噷闈紝鐒跺悗鍙戠幇瀹冭鍋氫竴涓繛鎺ワ紝鍒欓噸鏂板垎閰嶄竴鍧楁柊鐨勮凍澶熷ぇ鐨勫唴瀛橈紝澶у埌鑳藉鏀句笅褰撳墠鐨勫瓧絎︿覆鍔犱笂SomeCString2錛屾妸鍐呭澶嶅埗鍒拌繖鍧楀唴瀛?錛岀劧鍚庢妸 SomeCString2 榪炴帴鍒板悗闈紝鐒跺悗閲婃斁絎竴鍧楀唴瀛橈紝騫舵妸鎸囬拡閲嶆柊鎸囧悜鏂板唴瀛樸傜劧鍚庝負姣忎釜瀛楃涓查噸澶嶈繖涓繃紼嬨傛妸榪?4 涓瓧絎︿覆榪炴帴璧鋒潵鏁堢巼澶氫綆鍟娿備簨瀹炰笂錛屽湪寰堝鎯呭喌涓嬫牴鏈氨涓嶉渶瑕佸鍒舵簮瀛楃涓詫紙鍦?+= 鎿嶄綔絎﹀乏杈圭殑瀛楃涓詫級銆?br>銆銆鍦?VC++6.0 涓紝Release 妯″紡涓嬶紝鎵鏈夌殑 CString 涓殑緙撳瓨閮芥槸鎸夐瀹氫箟閲忓瓙鍒嗛厤鐨勩傛墍璋撻噺瀛愶紝鍗崇‘瀹氫負 64銆?28銆?56 鎴栬?512 瀛楄妭銆傝繖鎰忓懗鐫闄ら潪瀛楃涓查潪甯擱暱錛岃繛鎺ュ瓧絎︿覆鐨勬搷浣滃疄闄呬笂灝辨槸 strcat 緇忚繃浼樺寲鍚庣殑鐗堟湰錛堝洜涓哄畠鐭ラ亾鏈湴鐨勫瓧絎︿覆搴旇鍦ㄤ粈涔堝湴鏂圭粨鏉燂紝鎵浠ヤ笉闇瑕佸鎵懼瓧絎︿覆鐨勭粨灝撅紱鍙渶瑕佹妸鍐呭瓨涓殑鏁版嵁鎷瘋礉鍒版寚瀹氱殑鍦版柟鍗沖彲錛夊姞涓婇噸鏂拌綆楀瓧絎︿覆鐨勯暱搴︺傛墍浠ュ畠鐨勬墽琛屾晥鐜囧拰綰?C 鐨勪唬鐮佹槸涓鏍風殑錛屼絾鏄畠鏇村鏄撳啓銆佹洿瀹規槗緇存姢鍜屾洿瀹規槗鐞嗚В銆?br>銆銆濡傛灉浣犺繕鏄笉鑳界‘瀹氱┒绔熷彂鐢熶簡鎬庢牱鐨勮繃紼嬶紝璇風湅鐪?CString 鐨勬簮浠g爜錛宻trcore.cpp錛屽湪浣?vc98鐨勫畨瑁呯洰褰曠殑 mfc\src 瀛愮洰褰曚腑銆傜湅鐪?ConcatInPlace 鏂規硶錛屽畠琚湪鎵鏈夌殑 += 鎿嶄綔絎︿腑璋冪敤銆?/p>

鍟婂搱錛侀毦閬?CString 鐪熺殑榪欎箞"楂樻晥"鍚楋紵姣斿錛屽鏋滄垜鍒涘緩

CString cat("Mew!");
銆銆鐒跺悗鎴戝茍涓嶆槸寰楀埌浜嗕竴涓珮鏁堢殑銆佺簿綆鐨?涓瓧鑺傚ぇ灝忕殑緙撳啿鍖猴紙4涓瓧絎﹀姞涓涓粨鏉熷瓧絎︼級錛岀郴緇熷皢緇欐垜鍒嗛厤64涓瓧鑺傦紝鑰屽叾涓?9涓瓧鑺傞兘琚氮璐逛簡銆?br>銆銆濡傛灉浣犱篃鏄繖涔堟兂鐨勮瘽錛岄偅涔堝氨璇峰噯澶囧ソ鎺ュ彈鍐嶆暀鑲插惂銆傚彲鑳藉湪鏌愪釜鍦版柟鏌愪釜浜虹粰浣犺榪囧敖閲忎嬌鐢ㄥ皯鐨勭┖闂存槸浠跺ソ浜嬫儏銆備笉閿欙紝榪欑璇存硶鐨勭‘姝g‘錛屼絾鏄粬蹇界暐浜嗕簨瀹炰腑涓涓緢閲嶈鐨勬柟闈€?br>銆銆濡傛灉浣犵紪鍐欑殑鏄繍琛屽湪16K EPROMs涓嬬殑宓屽叆寮忕▼搴忕殑璇濓紝浣犳湁鐞嗙敱灝介噺灝戜嬌鐢ㄧ┖闂達紝鍦ㄨ繖縐嶇幆澧冧笅錛屽畠鑳戒嬌浣犵殑紼嬪簭鏇村仴澹備絾鏄湪 500MHz, 256MB鐨勬満鍣ㄤ笂鍐?Windows 紼嬪簭錛屽鏋滀綘榪樻槸榪欎箞鍋氾紝瀹冨彧浼氭瘮浣犺涓虹殑“浣庢晥”鐨勪唬鐮佽繍琛屽緱鏇寸碂銆?br>銆銆涓句緥鏉ヨ銆傚瓧絎︿覆鐨勫ぇ灝忚璁や負鏄獎鍝嶆晥鐜囩殑棣栬鍥犵礌錛屼嬌瀛楃涓插敖鍙兘灝忓彲浠ユ彁楂樻晥鐜囷紝鍙嶄箣鍒欓檷浣庢晥鐜囷紝榪欐槸澶у涓璐殑鎯蟲硶銆備絾鏄繖縐嶆兂娉曟槸涓嶅鐨勶紝綺劇‘鐨勫唴瀛樺垎閰嶇殑鍚庢灉瑕佸湪紼嬪簭榪愯浜嗗ソ鍑犱釜灝忔椂鍚庢墠鑳戒綋鐜板緱鍑烘潵錛岄偅鏃訛紝紼嬪簭鐨勫爢涓皢鍏呮弧灝忕墖鐨勫唴瀛橈紝瀹冧滑澶皬浠ヨ嚦浜庝笉鑳界敤鏉ュ仛浠諱綍浜嬶紝浣嗘槸浠栦滑澧炲姞浜嗕綘紼嬪簭鐨勫唴瀛樼敤閲忥紝澧炲姞浜嗗唴瀛橀〉闈氦鎹㈢殑嬈℃暟錛屽綋欏甸潰浜ゆ崲鐨勬鏁板鍔犲埌緋葷粺鑳藉蹇嶅彈鐨勪笂闄愶紝緋葷粺鍒欎細涓轟綘鐨勭▼搴忓垎閰嶆洿澶氱殑欏甸潰錛岀洿鍒頒綘鐨勭▼搴忓崰鐢ㄤ簡鎵鏈夌殑鍙敤鍐呭瓨銆傜敱姝ゅ彲瑙侊紝铏界劧鍐呭瓨紕庣墖鏄喅瀹氭晥鐜囩殑嬈¤鍥犵礌錛屼絾姝f槸榪欎簺鍥犵礌瀹為檯鎺у埗浜嗙郴緇熺殑琛屼負錛屾渶緇堬紝瀹冩崯瀹充簡緋葷粺鐨勫彲闈犳э紝榪欐槸浠や漢鏃犳硶鎺ュ彈鐨勩?br>銆銆璁頒綇錛屽湪 debug 妯″紡涓嬶紝鍐呭瓨寰寰鏄簿紜垎閰嶇殑錛岃繖鏄負浜嗘洿濂界殑鎺掗敊銆?br>銆銆鍋囪浣犵殑搴旂敤紼嬪簭閫氬父闇瑕佽繛緇伐浣滃ソ鍑犱釜鏈堛傛瘮濡傦紝鎴戝父鎵撳紑 VC++錛學ord錛孭owerPoint錛孎rontpage錛孫utlook Express錛孎orté Agent錛孖nternet Explorer鍜屽叾瀹冪殑涓浜涚▼搴忥紝鑰屼笖閫氬父涓嶅叧闂畠浠傛垜鏇劇粡澶滀互緇ф棩鍦拌繛緇敤 PowerPoint 宸ヤ綔浜嗗ソ鍑犲ぉ錛堝弽涔嬶紝濡傛灉浣犱笉騫鎬笉寰椾笉浣跨敤鍍?Adobe FrameMaker 榪欐牱鐨勭▼搴忕殑璇濓紝浣犲皢浼氫綋浼氬埌鍙潬鎬х殑閲嶈錛涜繖涓▼搴忔満浼氭瘡澶╅兘瑕佸穿婧?~6嬈★紝姣忔閮芥槸鍥犱負鐢ㄥ畬浜嗘墍鏈夌殑絀洪棿騫跺~婊℃垜鎵鏈夌殑浜ゆ崲欏甸潰錛夈傛墍浠ョ簿紜唴瀛樺垎閰嶆槸涓嶅彲鍙栫殑錛屽畠浼氬嵄鍙婂埌緋葷粺鐨勫彲闈犳э紝騫跺紩璧峰簲鐢ㄧ▼搴忓穿婧冦?br>銆銆鎸夐噺瀛愮殑鍊嶆暟涓哄瓧絎︿覆鍒嗛厤鍐呭瓨錛屽唴瀛樺垎閰嶅櫒灝卞彲浠ュ洖鏀剁敤榪囩殑鍐呭瓨鍧楋紝閫氬父榪欎簺鍥炴敹鐨勫唴瀛樺潡椹笂灝卞彲浠ヨ鍏跺畠鐨?CString 瀵硅薄閲嶆柊鐢ㄥ埌錛岃繖鏍峰氨鍙互淇濊瘉紕庣墖鏈灝戙傚垎閰嶅櫒鐨勫姛鑳藉姞寮轟簡錛屽簲鐢ㄧ▼搴忕敤鍒扮殑鍐呭瓨灝辮兘灝藉彲鑳戒繚鎸佹渶灝忥紝榪欐牱鐨勭▼搴忓氨鍙互榪愯鍑犱釜鏄熸湡鎴栧嚑涓湀鑰屼笉鍑虹幇闂銆?br>銆銆棰樺璇濓細寰堝騫翠互鍓嶏紝鎴戜滑鍦?CMU 鍐欎竴涓氦浜掑紡緋葷粺鐨勬椂鍊欙紝涓浜涘鍐呭瓨鍒嗛厤鍣ㄧ殑鐮旂┒鏄劇ず鍑哄畠寰寰浜х敓寰堝鍐呭瓨紕庣墖銆侸im Mitchell錛岀幇鍦ㄤ粬鍦?Sun Microsystems 宸ヤ綔錛岄偅鏃朵警浠栧垱閫犱簡涓縐嶅唴瀛樺垎閰嶅櫒錛屽畠淇濈暀浜嗕竴涓唴瀛樺垎閰嶇姸鍐電殑榪愯鏃剁粺璁¤〃錛岃繖縐嶆妧鏈拰褰撴椂鐨勪富嫻佸垎閰嶅櫒鎵鐢ㄧ殑鎶鏈兘涓嶅悓錛屼笖杈冧負棰嗗厛銆傚綋涓涓唴瀛樺潡闇瑕佽鍒嗗壊寰楁瘮鏌愪竴涓煎皬鐨勮瘽錛屼粬騫朵笉鍒嗗壊瀹冿紝鍥犳鍙互閬垮厤浜х敓澶灝忓埌浠涔堜簨閮藉共涓嶄簡鐨勫唴瀛樼鐗囥備簨瀹炰笂浠栧湪鍐呭瓨鍒嗛厤鍣ㄤ腑浣跨敤浜嗕竴涓誕鍔ㄦ寚閽堬紝浠栬涓猴細涓庡叾璁╂寚浠ゅ仛闀挎椂闂寸殑瀛樺彇鍐呭瓨鎿嶄綔錛岃繕涓嶅綆鍗曠殑蹇界暐閭d簺澶皬鐨勫唴瀛樺潡鑰屽彧鍋氫竴浜涙誕鍔ㄦ寚閽堢殑鎿嶄綔銆傦紙His observation was that the long-term saving in instructions by not having to ignore unusable small storage chunks far and away exceeded the additional cost of doing a few floating point operations on an allocation operation.錛変粬鏄鐨勩?br>銆銆姘歌繙涓嶈璁や負鎵璋撶殑“鏈浼樺寲”鏄緩绔嬪湪姣忎竴琛屼唬鐮侀兘楂橀熶笖鑺傜渷鍐呭瓨鐨勫熀紜涓婄殑錛屼簨瀹炰笂錛岄珮閫熶笖鑺傜渷鍐呭瓨搴旇鏄湪涓涓簲鐢ㄧ▼搴忕殑鏁翠綋姘村鉤涓婅冭檻鐨勩傚湪杞歡鐨勬暣浣撴按騫充笂錛屽彧浣跨敤鏈灝忓唴瀛樼殑瀛楃涓插垎閰嶇瓥鐣ュ彲鑳芥槸鏈緋熺硶鐨勪竴縐嶆柟娉曘?br>銆銆濡傛灉浣犺涓轟紭鍖栨槸浣犲湪姣忎竴琛屼唬鐮佷笂鍋氱殑閭d簺鍔姏鐨勮瘽錛屼綘搴旇鎯充竴鎯籌細鍦ㄦ瘡涓琛屼唬鐮佷腑鍋氱殑浼樺寲寰堝皯鑳界湡姝h搗浣滅敤銆備綘鍙互鐪嬫垜鐨勫彟涓綃囧叧浜庝紭鍖栭棶棰樼殑鏂囩珷銆奩our Worst Enemy for some thought-provoking ideas銆嬨?br>銆銆璁頒綇錛?= 榪愮畻絎﹀彧鏄竴縐嶇壒渚嬶紝濡傛灉浣犲啓鎴愪笅闈㈣繖鏍鳳細

CString s = SomeCString1 + SomeCString2 + SomeCString3 + "," + SomeCString4;
鍒欐瘡涓涓?+ 鐨勫簲鐢ㄤ細閫犳垚涓涓柊鐨勫瓧絎︿覆琚垱寤哄拰涓嬈″鍒舵搷浣溿?/p>

 鎬葷粨

銆銆浠ヤ笂鏄嬌鐢?CString 鐨勪竴浜涙妧宸с傛垜姣忓ぉ鍐欑▼搴忕殑鏃跺欓兘浼氱敤鍒拌繖浜涖侰String 騫朵笉鏄竴縐嶅緢闅句嬌鐢ㄧ殑綾伙紝浣嗘槸 MFC 娌℃湁寰堟槑鏄劇殑鎸囧嚭榪欎簺鐗瑰緛錛岄渶瑕佷綘鑷繁鍘繪帰绱€佸幓鍙戠幇銆?



鏉庝簹 2008-01-12 22:55 鍙戣〃璇勮
]]>
[杞琞 娣卞叆鎺㈣MFC娑堟伅寰幆鍜屾秷鎭車http://m.shnenglu.com/lilac/archive/2007/12/17/38782.html鏉庝簹鏉庝簹Mon, 17 Dec 2007 12:28:00 GMThttp://m.shnenglu.com/lilac/archive/2007/12/17/38782.htmlhttp://m.shnenglu.com/lilac/comments/38782.htmlhttp://m.shnenglu.com/lilac/archive/2007/12/17/38782.html#Feedback0http://m.shnenglu.com/lilac/comments/commentRss/38782.htmlhttp://m.shnenglu.com/lilac/services/trackbacks/38782.html娣卞叆鎺㈣MFC娑堟伅寰幆鍜屾秷鎭車

浣滆咃細鍛ㄧ劚

棣?鍏堬紝搴旇娓呮MFC鐨勬秷鎭驚鐜?::GetMessage,::PeekMessage)錛屾秷鎭車(CWinThread::PumpMessage)鍜?MFC鐨勬秷鎭湪紿楀彛涔嬮棿鐨勮礬鐢辨槸涓や歡涓嶅悓鐨勪簨鎯呫傚湪MFC鐨勫簲鐢ㄧ▼搴忎腑(搴旂敤紼嬪簭綾誨熀浜嶤WinThread緇ф壙)錛屽繀欏昏鏈変竴涓秷鎭驚鐜紝浠栫殑浣滅敤鏄粠 搴旂敤紼嬪簭鐨勬秷鎭槦鍒椾腑璇誨彇娑堟伅錛屽茍鎶婂畠媧鵑佸嚭鍘?::DispatchMessage)銆傝屾秷鎭礬鐢辨槸鎸囨秷鎭淳閫佸嚭鍘諱箣鍚庯紝緋葷粺(USER32.DLL) 鎶婃秷鎭姇閫掑埌鍝釜紿楀彛錛屼互鍙婁互鍚庢秷鎭湪紿楀彛涔嬮棿鐨勪紶閫掓槸鎬庢牱鐨勩?/font>

娑堟伅鍒嗕負闃熷垪娑堟伅(榪涘叆綰跨▼鐨勬秷鎭槦鍒? 鍜岄潪闃熷垪娑堟伅(涓嶈繘鍏ョ嚎紼嬬殑娑堟伅闃熷垪)銆傚浜庨槦鍒楁秷鎭紝鏈甯歌鐨勬槸榧犳爣鍜岄敭鐩樿Е鍙戠殑娑堟伅錛屼緥濡俉M_MOUSERMOVE,WM_CHAR絳夋秷鎭紱榪樻湁渚?濡傦細WM_PAINT銆乄M_TIMER鍜學M_QUIT銆傚綋榧犳爣銆侀敭鐩樹簨浠惰瑙﹀彂鍚庯紝鐩稿簲鐨勯紶鏍囨垨閿洏椹卞姩紼嬪簭灝變細鎶婅繖浜涗簨浠惰漿鎹㈡垚鐩稿簲鐨勬秷鎭紝鐒跺悗杈?閫佸埌緋葷粺娑堟伅闃熷垪錛岀敱Windows緋葷粺璐熻矗鎶婃秷鎭姞鍏ュ埌鐩稿簲綰跨▼鐨勬秷鎭槦鍒椾腑錛屼簬鏄氨鏈変簡娑堟伅寰幆(浠庢秷鎭槦鍒椾腑璇誨彇騫舵淳閫佹秷鎭?銆傝繕鏈変竴縐嶆槸闈為槦鍒楁秷 鎭紝浠栫粫榪囩郴緇熼槦鍒楀拰娑堟伅闃熷垪錛岀洿鎺ュ皢娑堟伅鍙戦佸埌紿楀彛榪囩▼銆備緥濡?褰撶敤鎴鋒縺媧諱竴涓獥鍙g郴緇熷彂閫乄M_ACTIVATE, WM_SETFOCUS, and WM_SETCURSOR銆傚垱寤虹獥鍙f椂鍙戦乄M_CREATE娑堟伅銆傚湪鍚庨潰浣犲皢鐪嬪埌錛孧S榪欎箞璁捐鏄緢鏈夐亾鐞嗙殑錛屼互鍙婁粬鐨勬暣濂楀疄鐜版満鍒躲?/p>

榪欓噷璁茶堪MFC鐨勬秷鎭驚鐜紝娑堟伅娉點傚厛鐪嬬湅紼嬪簭鍚姩鏃訛紝鎬庝箞榪涘叆娑堟伅寰幆鐨勶細
_tWinMain ->AfxWinMain ->AfxWinInit ->CWinThread::InitApplication ->CWinThread::InitInstance ->CWinThread::Run

闈炲璇濇紼嬪簭鐨勬秷鎭驚鐜殑浜嬫儏閮戒粠榪機WinThread鐨勪竴Run寮濮?..

絎竴閮ㄥ垎錛氶潪瀵硅瘽妗嗙▼搴忕殑娑堟伅寰幆鏈哄埗銆?/strong>

//thrdcore.cpp
// main running routine until thread exits
int CWinThread::Run()
{
ASSERT_VALID(this);

// for tracking the idle time state
BOOL bIdle = TRUE;
LONG lIdleCount = 0;

// acquire and dispatch messages until a WM_QUIT message is received.
for (;;)
{
// phase1: check to see if we can do idle work
while (bIdle &&
   !::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE))
{
   // call OnIdle while in bIdle state
   if (!OnIdle(lIdleCount++))
    bIdle = FALSE; // assume "no idle" state
}

// phase2: pump messages while available
do
{
   // pump message, but quit on WM_QUIT
   if (!PumpMessage())
    return ExitInstance();

   // reset "no idle" state after pumping "normal" message
   if (IsIdleMessage(&m_msgCur))
   {
    bIdle = TRUE;
    lIdleCount = 0;
   }

} while (::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE));
}    //鏃犻檺寰幆錛岄鍑烘潯浠舵槸鏀跺埌WM_QUIT娑堟伅銆?/font>

ASSERT(FALSE); // not reachable
}

榪欐槸涓涓棤闄愬驚鐜紝浠栫殑閫鍑烘潯浠舵槸鏀跺埌WM_QUIT娑堟伅錛?/p>

if (!PumpMessage())
    return ExitInstance();

鍦≒umpMessage涓紝濡傛灉鏀跺埌WM_QUIT娑堟伅錛岄偅涔堣繑鍥濬ALSE,鎵浠xitInstance()鍑芥暟鎵ц錛岃煩鍑哄驚鐜紝榪斿洖紼嬪簭鐨勯鍑轟唬鐮併傛墍浠ワ紝涓涓▼搴忚閫鍑猴紝鍙敤鍦ㄤ唬鐮佷腑璋冪敤鍑芥暟

VOID PostQuitMessage( int nExitCode )銆傛寚瀹氶鍑轟唬鐮乶ExitCode灝卞彲浠ラ鍑虹▼搴忋?/font>

涓嬮潰璁ㄨ涓涓嬭繖涓嚱鏁癛un鐨勬祦紼嬶紝鍒嗕袱姝ワ細

1, 絎竴涓唴寰幆phase1銆俠Idle浠h〃紼嬪簭鏄惁絀洪棽銆備粬鐨勬剰鎬濆氨鏄紝濡傛灉紼嬪簭鏄┖闂插茍涓旀秷鎭槦鍒椾腑娌℃湁瑕佸鐞嗙殑娑堟伅錛岄偅涔堣皟鐢ㄨ櫄鍑芥暟OnIdle榪涜 絀洪棽澶勭悊銆傚湪榪欎釜澶勭悊涓皢鏇存柊UI鐣岄潰(姣斿宸ュ叿鏍忔寜閽殑enable鍜宒isable鐘舵?錛屽垹闄や復鏃跺璞?姣斿鐢‵romHandle寰楀埌鐨勫璞℃寚 閽堛傜敱浜庤繖涓師鍥狅紝鍦ㄥ嚱鏁頒箣闂翠紶閫掔敱FromHandle寰楀埌鐨勫璞℃寚閽堟槸涓嶅畨鍏ㄧ殑錛屽洜涓轟粬娌℃湁鎸佷箙鎬?銆侽nIdle鏄彲浠ラ噸杞界殑錛屼綘鍙互閲嶈澆浠栧茍榪斿洖 TRUE浣挎秷鎭驚鐜戶緇浜庣┖闂茬姸鎬併?/p>

NOTE錛歁S鐢ㄤ復鏃跺璞℃槸鍑轟簬鏁堢巼涓婄殑鑰冭檻錛屼嬌鍐呭瓨 鏈夋晥鍒╃敤錛屽茍鑳藉鍦ㄧ┖闂叉椂鑷姩鎾ら攢璧勬簮銆傚叧浜庣敱鍙ユ焺杞崲鎴愬璞★紝鍙互鏈夎嫢騫茬鏂規硶銆備竴鑸槸鍏堢敵鏄庝竴涓璞bj,鐒跺悗浣跨敤obj.Attatch鏉ュ拰涓涓?鍙ユ焺緇戝畾銆傝繖鏍蜂駭鐢熺殑瀵硅薄鏄案涔呯殑錛屼綘蹇呴』鐢╫bj.Detach鏉ラ噴鏀懼璞°?/font>

2錛岀浜屼釜鍐呭驚鐜痯hase2銆傚湪榪欎釜寰幆鍐呭厛鍚姩娑堟伅娉?PumpMessage),濡傛灉涓嶆槸WM_QUIT娑堟伅錛屾秷鎭車灝嗘秷鎭彂閫佸嚭鍘?::DispatchMessage)銆傛秷鎭殑鐩殑鍦版槸娑堟伅緇撴瀯涓殑hwnd瀛楁鎵瀵瑰簲鐨勭獥鍙c?br>//thrdcore.cpp
BOOL CWinThread::PumpMessage()
{
ASSERT_VALID(this);

//濡傛灉鏄疻M_QUIT灝遍鍑哄嚱鏁?return FALSE)錛岃繖灝嗗鑷寸▼搴忕粨鏉?
if (!::GetMessage(&m_msgCur, NULL, NULL, NULL)) {
#ifdef _DEBUG
   if (afxTraceFlags & traceAppMsg)
    TRACE0("CWinThread::PumpMessage - Received WM_QUIT.\n");
   m_nDisablePumpCount++; // application must die
    // Note: prevents calling message loop things in 'ExitInstance'
    // will never be decremented
#endif
   return FALSE;
}

#ifdef _DEBUG
if (m_nDisablePumpCount != 0)
{
   TRACE0("Error: CWinThread::PumpMessage called when not permitted.\n");
   ASSERT(FALSE);
}
#endif

#ifdef _DEBUG
if (afxTraceFlags & traceAppMsg)
   _AfxTraceMsg(_T("PumpMessage"), &m_msgCur);
#endif

// process this message

if (m_msgCur.message != WM_KICKIDLE && !PreTranslateMessage(&m_msgCur))
{
   ::TranslateMessage(&m_msgCur); //閿漿鎹?/font>
   ::DispatchMessage(&m_msgCur); //媧鵑佹秷鎭?/font>
}
return TRUE;
}

鍦?榪欎竴姝ユ湁涓涓壒鍒噸瑕佺殑鍑芥暟澶у涓瀹氳璇嗭細PreTranslateMessage銆傝繖涓嚱鏁板湪::DispatchMessage鍙戦佹秷鎭埌紿楀彛涔嬪墠錛?榪涜瀵規秷鎭殑棰勫鐞嗐侾reTranslateMessage鍑芥暟鏄疌WinThread鐨勬垚鍛樺嚱鏁幫紝澶у閲嶈澆鐨勬椂鍊欓兘鏄湪View綾繪垨鑰呬富紿楀彛綾諱腑錛岄偅 涔堬紝瀹冩槸鎬庝箞榪涘叆鍒殑綾葷殑鍛紵浠g爜濡備笅錛?br>//thrdcore.cpp
BOOL CWinThread::PreTranslateMessage(MSG* pMsg)
{
ASSERT_VALID(this);

// 濡傛灉鏄嚎紼嬫秷鎭紝閭d箞灝嗕細璋冪敤綰跨▼娑堟伅鐨勫鐞嗗嚱鏁?/font>
if (pMsg->hwnd == NULL && DispatchThreadMessageEx(pMsg))
   return TRUE;

// walk from target to main window
CWnd* pMainWnd = AfxGetMainWnd();
if (CWnd::WalkPreTranslateTree(pMainWnd->GetSafeHwnd(), pMsg))
   return TRUE;

// in case of modeless dialogs, last chance route through main
//   window's accelerator table
if (pMainWnd != NULL)
{
   CWnd* pWnd = CWnd::FromHandle(pMsg->hwnd);
   if (pWnd->GetTopLevelParent() != pMainWnd)
    return pMainWnd->PreTranslateMessage(pMsg);
}

return FALSE;   // no special processing
}

鐢變笂闈㈣繖涓嚱鏁板彲浠ョ湅鍑猴細

絎竴錛屽鏋?pMsg->hwnd == NULL),璇存槑榪欐槸涓涓嚎紼嬫秷鎭傝皟鐢–WinThread::DispatchThreadMessageEx鍒版秷鎭槧灝勮〃鎵懼埌娑堟伅鍏ュ彛錛岀劧鍚庤皟鐢ㄦ秷鎭鐞嗗嚱鏁般?/p>

NOTE: 涓鑸敤PostThreadMessage鍑芥暟鍙戦佺嚎紼嬩箣闂寸殑娑堟伅錛屼粬鍜岀獥鍙f秷鎭笉鍚岋紝闇瑕佹寚瀹氱嚎紼媔d,娑堟伅嬋琚郴緇熸斁鍏ュ埌鐩爣綰跨▼鐨勬秷鎭槦鍒椾腑錛涚敤 ON_THREAD_MESSAGE( message, memberFxn )瀹忓彲浠ユ槧灝勭嚎紼嬫秷鎭拰浠栫殑澶勭悊鍑芥暟銆傝繖涓畯蹇呴』鍦ㄥ簲鐢ㄧ▼搴忕被(浠嶤WinThread緇ф壙)涓紝鍥犱負鍙湁搴旂敤紼嬪簭綾繪墠澶勭悊綰跨▼娑堟伅銆傚鏋滀綘鍦ㄥ埆鐨勭被(姣?濡傝鍥劇被)涓敤榪欎釜瀹忥紝綰跨▼娑堟伅鐨勬秷鎭鐞嗗嚱鏁板皢寰椾笉鍒扮嚎紼嬫秷鎭?/font>

絎簩錛屾秷鎭殑鐩爣紿楀彛鐨?PreTranslateMessage鍑芥暟棣栧厛寰楀埌娑堟伅澶勭悊鏉冿紝濡傛灉鍑芥暟榪斿洖FALSE錛岄偅涔堜粬鐨勭埗紿楀彛灝嗗緱鍒版秷鎭殑澶勭悊鏉冿紝鐩村埌涓葷獥鍙o紱濡傛灉鍑芥暟榪斿洖 TRUE(琛ㄧず娑堟伅宸茬粡琚鐞嗕簡)錛岄偅涔堝氨涓嶉渶瑕佽皟鐢ㄧ埗綾葷殑PreTranslateMessage鍑芥暟銆傝繖鏍鳳紝淇濊瘉浜嗘秷鎭殑鐩爣紿楀彛浠ュ強浠栫殑鐖剁獥鍙i兘鍙?浠ユ湁鏈轟細璋冪敤PreTranslateMessage--鍦ㄦ秷鎭彂閫佸埌紿楀彛涔嬪墠榪涜棰勫鐞?濡傛灉鑷繁澶勭悊瀹岀劧鍚庤繑鍥濬ALSE鐨勮瘽 -_-b),濡傛灉浣犳兂瑕佹秷鎭笉浼犻掔粰鐖剁被榪涜澶勭悊鐨勮瘽錛岃繑鍥濼RUE灝辮浜嗐?/p>

絎笁錛屽鏋滄秷鎭殑鐩爣紿楀彛鍜屼富紿楀彛娌℃湁鐖跺瓙鍏崇郴錛岄偅涔堝啀璋冪敤涓?紿楀彛鐨凱reTranslateMessage鍑芥暟銆備負浠涔堣繖鏍鳳紵鐢辯浜屾鐭ラ亾錛屼竴涓獥鍙g殑鐖剁獥鍙d笉鏄富紿楀彛鐨勮瘽錛屽敖綆″畠鐨?PreTranslateMessage榪斿洖FALSE錛屼富紿楀彛涔熸病鏈夋満浼氳皟鐢≒reTranslateMessage鍑芥暟銆傛垜浠煡閬擄紝鍔犻熼敭鐨勮漿鎹竴鑸?鍦ㄦ鏋剁獥鍙g殑PreTranslateMessage鍑芥暟涓傛垜鎵鵑亶浜哅FC涓叧浜庡姞閫熼敭杞崲鐨勫鐞嗭紝鍙湁CFrameWnd, CMDIFrameWnd錛孋MDIChildWnd絳夌獥鍙g被鏈夈傛墍浠ワ紝絎笁姝ョ殑鎰忔濇槸錛屽鏋滄秷鎭殑鐩爣紿楀彛(浠栫殑鐖剁獥鍙d笉鏄富紿楀彛錛屾瘮濡備竴涓繖鏍風殑闈炴ā 寮忓璇濇)浣挎秷鎭殑棰勫鐞嗙戶緇極娓哥殑璇?浠栫殑PreTranslateMessage榪斿洖FALSE)錛岄偅涔堢粰涓嬈℃満浼氱粰涓葷獥鍙h皟鐢?PreTranslateMessage(涓囦竴浠栨槸鏌愪釜鍔犻熼敭娑堟伅鍛紵)錛岃繖鏍瘋兘澶熶繚璇佸湪鏈夐潪妯″紡瀵硅瘽妗嗙殑鎯呭喌涓嬭繕鑳戒繚璇佷富紿楀彛鐨勫姞閫熼敭濂戒嬌銆?br>鎴戝仛浜嗕竴涓皬渚嬪瓙錛屽湪瀵硅瘽妗嗙被鐨凱reTranslateMessage涓紝榪斿洖FALSE銆傚湪涓葷獥鍙f樉紺鴻繖涓潪妯″紡瀵硅瘽妗嗭紝鍦ㄥ璇濇鎷ユ湁鐒︾偣鐨勬椂鍊欙紝浠嶇劧鑳藉嬋媧諱富紿楀彛鐨勫揩鎹烽敭銆?/p>

鎬諱箣錛屾暣涓鏋跺氨鏄姣忎釜娑堟伅鐨勭洰鏍囩獥鍙?鍖呮嫭浠栫殑鐖剁獥鍙?閮芥湁鏈轟細鍙備笌娑堟伅鍒版潵涔嬪墠鐨勫鐞嗐傚懙鍛祣

鑷?姝わ紝闈炲璇濇鐨勬秷鎭驚鐜拰娑堟伅娉電殑鏈哄埗灝卞樊涓嶅浜嗐傝繖涓満鍒跺湪涓涓棤闄愬驚鐜腑錛屼笉鏂湴浠庢秷鎭槦鍒椾腑鑾峰彇娑堟伅錛屽茍涓斾繚璇佷簡紼嬪簭鐨勭嚎紼嬫秷鎭兘澶熷緱鍒版満浼氬鐞嗭紝 紿楀彛娑堟伅鍦ㄩ澶勭悊涔嬪悗琚彂閫佸埌鐩稿簲鐨勭獥鍙e鐞嗚繃紼嬨傞偅涔堬紝榪樻湁涓鐐圭枒闂紝涓轟粈涔堣涓浼氬効璋冪敤::PeekMessage,涓浼氬効璋冪敤:: GetMessage鍛紝浠栦滑鏈変粈涔堝尯鍒紵

NOTE錛氫竴鑸潵璇達紝GetMessage琚璁$敤鏉ラ珮鏁堝湴浠庢秷鎭槦鍒楄幏鍙栨秷鎭傚鏋滈槦鍒椾腑娌℃湁娑堟伅錛岄偅涔堝嚱鏁癎etMessage灝嗗鑷寸嚎紼嬩紤鐪?璁╁嚭CPU鏃墮棿)銆傝孭eekMessage鏄垽鏂秷鎭槦鍒椾腑濡傛灉娌℃湁娑堟伅錛屽畠椹笂榪斿洖0錛屼笉浼氬鑷寸嚎紼嬪浜庣潯鐪犵姸鎬併?/font>

鍦?涓婇潰鐨刾hase1絎竴涓唴寰幆涓敤鍒頒簡PeekMessage錛屽畠鐨勫弬鏁癙M_NOREMOVE琛ㄧず騫朵笉浠庢秷鎭槦鍒椾腑縐昏蛋娑堟伅錛岃屾槸涓涓嫻嬫煡璇紝濡傛灉 娑堟伅闃熷垪涓病鏈夋秷鎭粬绔嬪埢榪斿洖0錛屽鏋滆繖鏃剁嚎紼嬬┖闂茬殑璇濆皢浼氬紩璧鋒秷鎭驚鐜皟鐢∣nIdle澶勭悊榪囩▼(涓婇潰璁插埌浜嗚繖涓嚱鏁扮殑閲嶈鎬?銆傚鏋滃皢:: PeekMessage鏀規垚::GetMessage(***),閭d箞濡傛灉娑堟伅闃熷垪涓病鏈夋秷鎭紝綰跨▼灝嗕紤鐪狅紝鐩村埌綰跨▼涓嬩竴嬈¤幏寰桟PU鏃墮棿騫朵笖鏈夋秷鎭嚭鐜?鎵嶅彲鑳界戶緇墽琛岋紝榪欐牱錛屾秷鎭驚鐜殑絀洪棽鏃墮棿娌℃湁寰楀埌搴旂敤錛孫nIdle涔熷皢寰椾笉鍒版墽琛屻傝繖灝辨槸涓轟粈涔堟棦瑕佺敤::PeekMessage(鏌ヨ),鍙堣 鐢?:GetMessage(鍋氬疄闄呯殑宸ヤ綔)鐨勭紭鏁呫?/p>

絎簩閮ㄥ垎: 瀵硅瘽妗嗙▼搴忕殑娑堟伅寰幆鏈哄埗

鍩轟簬瀵硅瘽妗嗙殑MFC宸ョ▼鍜屼笂闈㈢殑娑堟伅寰幆鏈哄埗涓嶄竴鏍楓傚疄闄呬笂MFC鐨勫璇濇宸ョ▼紼嬪簭灝辨槸妯″紡瀵硅瘽妗嗐備粬鍜屼笂闈㈣鍒扮殑闈炲璇濇紼嬪簭鐨勪笉鍚屼箣澶勶紝涓昏鍦ㄤ簬搴旂敤紼嬪簭瀵硅薄鐨処nitInstance()涓嶄竴鏍楓?/p>

//dlg_5Dlg.cpp
BOOL CDlg_5App::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls();    // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

CDlg_5Dlg dlg; //瀹氫箟涓涓璇濇瀵硅薄
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal(); //瀵硅瘽妗嗙殑娑堟伅寰幆鍦ㄨ繖閲岄潰寮濮?/font>
if (nResponse == IDOK)
{
   // TODO: Place code here to handle when the dialog is
   // dismissed with OK
}
else if (nResponse == IDCANCEL)
{
   // TODO: Place code here to handle when the dialog is
   // dismissed with Cancel
}

// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}

NOTE: InitInstance鍑芥暟榪斿洖FALSE錛岀敱鏈涓婇潰紼嬪簭鍚姩嫻佺▼鍙互鐪嬪嚭錛孋WinThread::Run鏄笉浼氬緱鍒版墽琛岀殑銆備篃灝辨槸璇達紝涓婇潰絎竴閮ㄥ垎 璇寸殑娑堟伅寰幆鍦ㄥ璇濇涓槸涓嶈兘鎵ц鐨勩傚疄闄呬笂錛屽璇濇涔熸湁娑堟伅寰幆錛屽ス鐨勬秷鎭驚鐜湪CDialog::DoModal()铏氬嚱鏁頒腑鐨勪竴涓?RunModalLoop鍑芥暟涓?/font>

榪欎釜鍑芥暟鐨勫疄鐜頒綋鍦–Wnd綾諱腑錛?br>int CWnd::RunModalLoop(DWORD dwFlags)
{
ASSERT(::IsWindow(m_hWnd)); // window must be created
ASSERT(!(m_nFlags & WF_MODALLOOP)); // window must not already be in modal state

// for tracking the idle time state
BOOL bIdle = TRUE;
LONG lIdleCount = 0;
BOOL bShowIdle = (dwFlags & MLF_SHOWONIDLE) && !(GetStyle() & WS_VISIBLE);
HWND hWndParent = ::GetParent(m_hWnd);
m_nFlags |= (WF_MODALLOOP|WF_CONTINUEMODAL);
MSG* pMsg = &AfxGetThread()->m_msgCur;

// acquire and dispatch messages until the modal state is done
for (;;)
{
   ASSERT(ContinueModal());

   // phase1: check to see if we can do idle work
   while (bIdle &&
    !::PeekMessage(pMsg, NULL, NULL, NULL, PM_NOREMOVE))
   {
    ASSERT(ContinueModal());

    // show the dialog when the message queue goes idle
    if (bShowIdle)
    {
     ShowWindow(SW_SHOWNORMAL);
     UpdateWindow();
     bShowIdle = FALSE;
    }

    // call OnIdle while in bIdle state
    if (!(dwFlags & MLF_NOIDLEMSG) && hWndParent != NULL && lIdleCount == 0)
    {
     // send WM_ENTERIDLE to the parent
     ::SendMessage(hWndParent, WM_ENTERIDLE, MSGF_DIALOGBOX, (LPARAM)m_hWnd);
    }
    if ((dwFlags & MLF_NOKICKIDLE) ||
     !SendMessage(WM_KICKIDLE, MSGF_DIALOGBOX, lIdleCount++))
    {
     // stop idle processing next time
     bIdle = FALSE;
    }
   }

// phase2: pump messages while available
   do
   {
    ASSERT(ContinueModal());

    // pump message, but quit on WM_QUIT
   //PumpMessage(娑堟伅娉?鐨勫疄鐜板拰涓婇潰璁茬殑宸笉澶氥傞兘鏄淳閫佹秷鎭埌紿楀彛銆?/font>
    if (!AfxGetThread()->PumpMessage())
    {
     AfxPostQuitMessage(0);
     return -1;
    }

    // show the window when certain special messages rec'd
    if (bShowIdle &&
     (pMsg->message == 0x118 || pMsg->message == WM_SYSKEYDOWN))
    {
     ShowWindow(SW_SHOWNORMAL);
     UpdateWindow();
     bShowIdle = FALSE;
    }

    if (!ContinueModal())
     goto ExitModal;

    // reset "no idle" state after pumping "normal" message
    if (AfxGetThread()->IsIdleMessage(pMsg))
    {
     bIdle = TRUE;
     lIdleCount = 0;
    }

   } while (::PeekMessage(pMsg, NULL, NULL, NULL, PM_NOREMOVE));
} //鏃犻檺寰幆

ExitModal:
m_nFlags &= ~(WF_MODALLOOP|WF_CONTINUEMODAL);
return m_nModalResult;
}

鍏堣璇存庝箞閫鍑鴻繖涓棤闄愬驚鐜紝鍦ㄤ唬鐮佷腑錛?br>if (!ContinueModal())
goto ExitModal;
鍐沖畾鏄惁閫鍑哄驚鐜紝娑堟伅寰幆鍑芥暟榪斿洖涔熷氨鏄揩瑕佺粨鏉熺粨鏉熺▼搴忎簡銆?br>BOOL CWnd::ContinueModal()
{
return m_nFlags & WF_CONTINUEMODAL;
}

NOTE: CWnd::ContinueModal()鍑芥暟媯鏌ュ璇濇鏄惁緇х畫妯″紡銆傝繑鍥濼RUE,琛ㄧず鐜板湪鏄ā寮忕殑錛涜繑鍥濬ALSE錛岃〃紺哄璇濇宸茬粡涓嶆槸妯″紡(灝嗚緇撴潫)銆?/font>

濡?鏋滆緇撴潫瀵硅瘽妗嗭紝鍦ㄥ唴閮ㄦ渶緇堜細璋冪敤鍑芥暟CWnd::EndModalLoop錛屽畠鍙栨秷m_nFlags鐨勬ā寮忔爣蹇?娑堟伅寰幆涓殑 ContinueModal鍑芥暟灝嗚繑鍥濬ALSE錛屾秷鎭驚鐜皢緇撴潫錛岀▼搴忓皢閫鍑?錛涚劧鍚庢縺鍙戞秷鎭驚鐜鍙栨秷鎭備篃灝辨槸璇達紝緇撴潫妯″紡瀵硅瘽妗嗘槸涓涓爣蹇楋紝鏀瑰彉 榪欎釜鏍囧織灝卞彲浠ヤ簡銆備粬鐨勪唬鐮佹槸錛?/p>

//wincore.cpp
void CWnd::EndModalLoop(int nResult)
{
ASSERT(::IsWindow(m_hWnd));

// this result will be returned from CWnd::RunModalLoop
m_nModalResult = nResult;

// make sure a message goes through to exit the modal loop
if (m_nFlags & WF_CONTINUEMODAL)
{
   m_nFlags &= ~WF_CONTINUEMODAL;
   PostMessage(WM_NULL);
}
}

NOTE: PostMessage(NULL)鏄湁鐢ㄧ殑銆傚鏋滄秷鎭槦鍒椾腑娌℃湁娑堟伅鐨勮瘽錛屽彲鑳芥秷鎭驚鐜腑鐨凜ontinueModal()涓嶄細椹笂鎵ц錛屽彂閫佷竴涓┖娑堟伅鏄縺鍙戞秷鎭驚鐜┈涓婂伐浣溿?/font>

涓嬮潰璇翠竴涓婥Wnd::RunModalLoop鍑芥暟涓殑娑堟伅寰幆絀剁珶騫蹭簡浜涗粈涔堜簨鎯?
1, 絎竴涓唴寰幆銆傞鍏堜粠娑堟伅闃熷垪涓煡璇㈡秷鎭紝濡傛灉瀵硅瘽妗嗙┖闂詫紝鑰屼笖娑堟伅闃熷垪涓病鏈夋秷鎭紝浠栧仛涓変歡浜嬫儏錛屽ぇ瀹跺簲鍒伴兘鑳戒粠瀛楅潰涓婃槑鐧戒粈涔堟剰鎬濄傛渶閲嶈鐨勬槸鍙戦?WM_KICKIDLE娑堟伅銆備負浠涔堝憿錛熺涓閮ㄥ垎璁插埌浜嗭紝闈炲璇濇紼嬪簭鐢∣nIdle鏉ユ洿鏂扮敤鎴風晫闈?UI)錛屾瘮濡傚伐鍏鋒爮錛岀姸鎬佹爮銆傞偅涔堬紝濡傛灉瀵硅瘽妗嗕腑涔?鏈夊伐鍏鋒爮鍜岀姸鎬佹爮鍛紝鍦ㄥ摢閲屾洿鏂?緗戜笂鏈夊緢澶氳繖鏍風殑紼嬪簭)錛熷彲浠ュ鐞哤M_KICKIDLE娑堟伅錛?br>
LRESULT CDlg_5Dlg::OnKickIdle(WPARAM w,LPARAM l)
{
     //璋冪敤CWnd::UpdateDialogControls鏇存柊鐢ㄦ埛鐣岄潰
     UpdateDialogControls(this, TRUE);
     return 0;
}

NOTE: CWnd::UpdateDialog鍑芥暟鍙戦丆N_UPDATE_COMMAND_UI娑堟伅緇欐墍鏈夌殑鐢ㄦ埛鐣岄潰瀵硅瘽妗嗘帶浠躲?/font>

2, 絎簩涓唴寰幆銆傛渶閲嶈鐨勮繕鏄疨umpMessage媧鵑佹秷鎭埌鐩爣紿楀彛銆傚叾浠栫殑錛屽儚絎簩涓猧f璇彞錛?x118娑堟伅濂藉儚鏄疻M_SYSTIMER娑堟伅(緋?緇熺敤鏉ラ氱煡鍏夋爣璺沖姩鐨勪竴涓秷鎭?銆備篃灝辨槸璇達紝濡傛灉娑堟伅涓篧M_SYSTIMER鎴栬匴M_SYSKEYDOWN,騫朵笖絀洪棽鏄劇ず鏍囧織涓虹湡鐨勮瘽錛屽氨鏄劇ず紿楀彛騫?閫氱煡紿楀彛绔嬪埢閲嶇粯銆?/p>

鎬諱箣錛屽璇濇鐨勬秷鎭驚鐜満鍒跺拰闈炲璇濇(姣斿SDI,MDI)榪樻槸綾諱技 鐨勶紝浠呬粎渚ч噸鐐逛笉鍚屻傛ā寮忓璇濇鏄ā寮忔樉紺猴紝鑷劧鏈変粬鐨勭壒鐐廣備笅闈㈤儴鍒嗚璁轟竴涓嬫ā寮忓璇濇鍜岄潪妯″紡瀵硅瘽妗嗙殑鍖哄埆銆傚洜涓烘ā寮忓璇濇鏈夎嚜宸辯殑鐗規畩娑堟伅寰幆錛涜?闈炴ā寮忓璇濇錛屽叡鐢ㄧ▼搴忕殑娑堟伅寰幆錛屽拰鏅氱殑紿楀彛宸茬粡娌℃湁浠涔堝ぇ鐨勫尯鍒簡銆?/font>

絎笁閮ㄥ垎錛氭ā寮忓璇濇鍜岄潪妯″紡瀵硅瘽妗嗙殑鍖哄埆

榪欎釜璇濋宸茬粡鏈夊緢澶氫漢璁ㄨ錛屾垜璇磋鎴戞墍鐞嗚В鐨勬剰鎬濄?br>鍦∕FC 妗嗘灦涓紝涓涓璇濇瀵硅薄DoModal涓涓嬪氨鑳戒駭鐢熶竴涓ā寮忓璇濇錛孋reate涓涓嬪氨鑳戒駭鐢熶竴涓潪妯″紡瀵硅瘽妗嗐傚疄闄呬笂錛屾棤璁烘槸妯″紡瀵硅瘽妗嗚繕鏄潪妯″紡瀵硅瘽 妗嗭紝鍦∕FC鍐呴儴閮芥槸璋冪敤::CreateDialogIndirect(***)鍑芥暟鏉ュ垱寤洪潪妯″紡瀵硅瘽妗嗐傚彧鏄ā寮忓璇濇浣滀簡鏇村鐨勫伐浣滐紝鍖呮嫭浣跨埗紿楀彛 鏃犳晥錛岀劧鍚庤繘鍏ヨ嚜宸辯殑娑堟伅寰幆絳夌瓑銆?:CreateDialogIndirect(***)鍑芥暟鏈緇堣皟鐢–reateWindowEx鍑芥暟閫氱煡緋葷粺鍒涘緩 紿椾綋騫惰繑鍥炲彞鏌勶紝浠栧唴閮ㄦ病鏈夊疄鐜拌嚜宸辯殑娑堟伅寰幆銆?br>闈炴ā寮忓璇濇鍒涘緩涔嬪悗绔嬪嵆榪斿洖錛屽茍涓斿拰涓葷▼搴忓叡鐢ㄤ竴涓秷鎭驚鐜傞潪妯″紡瀵硅瘽妗嗚絳夊璇濇緇撴潫涔嬪悗鎵嶈繑鍥烇紝鑷繁鏈夋秷鎭驚鐜傛瘮濡備笅闈㈢殑浠g爜錛?br>CMyDlg* pdlg = new CMyDlg;
pdlg ->Create(IDD_DIALOG1);
pdlg->ShowWindow(SW_SHOW);
MessageBox("abc");
闈炴ā寮忓璇濇鍜屾秷鎭MessageBox鍑犱箮鏄悓鏃跺脊鍑烘潵銆傝屽鏋滃皢Create鏀規垚DoModal錛岄偅涔堬紝鍙兘寮瑰嚭妯″紡瀵硅瘽妗嗭紝鍦ㄥ叧闂簡瀵硅瘽妗嗕箣鍚?妯″紡瀵硅瘽妗嗚嚜宸辯殑娑堟伅寰幆緇撴潫)錛屾秷鎭鎵嶅脊鍑烘潵銆?/p>

NOTE錛?鍙互鍦ㄦā寮忓璇濇涓皟鐢℅etParent()->EnableWindow(true);榪欐牱錛屼富紿楀彛鐨勮彍鍗曪紝宸ュ叿鏍忓張嬋媧諱簡錛岃兘鐢ㄤ簡銆侻FC浣?鐢ㄩ潪妯″紡瀵硅瘽妗嗘潵妯℃嫙妯″紡瀵硅瘽妗嗭紝鑰屽湪win32 SDK紼嬪簭涓紝妯″紡瀵硅瘽妗嗘縺鍙戜粬鐨勭埗紿楀彛Enable鎿嶄綔鏄病鏈夋晥鏋滅殑銆?/font>

鍏充簬娑堟伅寰幆鎬葷粨錛?/strong>


1錛?鎴戜滑绔欏湪涓涓粈涔堥珮搴︾湅娑堟伅寰幆錛熸秷鎭驚鐜叾瀹炴病鏈変粈涔堟繁濂ョ殑閬撶悊銆傚鏋滀竴涓偖閫掑憳瑕佷笉鏂湪涓涓煄甯備腑閫佷俊錛屾垜浠姹備粬鍋氫粈涔堬紵瑕佹眰浠栨潵鍥炶窇錛屼絾浠栦竴嬈″彧 鑳藉湪涓涓湴鏂瑰嚭鐜般傚鏋滄垜浠殑搴旂敤紼嬪簭鍙湁涓涓嚎紼嬬殑璇濓紝鎴戜滑瑕佷粬涓嶆柇鍦頒負紿楀彛浼犻掓秷鎭紝鎴戜滑鎬庝箞鍋氾紵鍦ㄤ竴涓驚鐜腑涓嶆柇鐨勬嫻嬫秷鎭紝騫跺皢浠栧彂閫佸埌閫傚綋鐨勭獥 鍙c傜獥鍙e彲浠ユ湁寰堝涓紝浣嗘秷鎭驚鐜彧鏈変竴涓紝鑰屼笖姣忔椂姣忓埢鏈澶氬彧鏈変竴涓湴鏂瑰湪鎵ц浠g爜銆備負浠涔堬紵 鐪嬬浜岀偣銆?/p>

2錛屽洜涓烘槸鍗曠嚎紼嬬殑(紼嬪簭榪涚▼ 鍚姩鐨勬椂鍊欙紝鍙湁鑰屼笖鏈変竴涓嚎紼嬶紝鎴戜滑縐頒粬涓轟富綰跨▼),鎵浠ュ氨鍍忛偖閫掑憳涓鏍鳳紝姣忔鍙兘鍦ㄦ煇涓涓湴鏂瑰共媧匯備粈涔堟剰鎬濆憿錛熶婦涓緥瀛愶紝鐢?: DiapatchMessage媧鵑佹秷鎭紝鍦ㄧ獥鍙e鐞嗚繃紼?WinProc,紿楀彛鍑芥暟)榪斿洖涔嬪墠錛屼粬鏄樆濉炵殑,涓嶄細绔嬪嵆榪斿洖錛屼篃灝辨槸娑堟伅寰幆姝ゆ椂涓嶈兘鍐嶄粠 娑堟伅闃熷垪涓鍙栨秷鎭紝鐩村埌::DispatchMessage榪斿洖銆傚鏋滀綘鍦ㄧ獥鍙e嚱鏁頒腑鎵ц涓涓寰幆鎿嶄綔錛屽氨綆椾綘鐢≒ostQuitMessage鍑芥暟 閫鍑猴紝紼嬪簭涔熶細down鎺夈?br>while(1)
{
    PostQuitMessage(0); //紼嬪簭鐓ф牱down.
}
鎵 浠ワ紝褰撶獥鍙e嚱鏁板鐞嗘病鏈夎繑鍥炵殑鏃跺欙紝娑堟伅寰幆鏄笉浼氫粠娑堟伅闃熷垪涓鍙栨秷鎭殑銆傝繖涔熸槸涓轟粈涔堝湪妯″紡瀵硅瘽妗嗕腑瑕佽嚜宸辯敤鏃犻檺寰幆鏉ョ戶緇秷鎭驚鐜紝鍥犱負榪欎釜鏃犻檺寰?鐜樆濉炰簡鍘熸潵鐨勬秷鎭驚鐜紝鎵浠ワ紝鍦ㄨ繖涓棤闄愬驚鐜腑瑕佺敤GetMessage,PeekMessage,DispatchMessage鏉ヤ粠娑堟伅闃熷垪涓鍙?娑堟伅騫舵淳閫佹秷鎭簡銆傝涓嶇劧紼嬪簭灝變笉浼氬搷搴斾簡錛岃繖涓嶆槸鎴戜滑鎵甯屾湜鐨勩?br>鎵浠ヨ錛屾秷鎭驚鐜斁鍦ㄧ▼搴忕殑浠涔堢殑鍦版柟閮藉熀鏈笂鏄繃鐨勫幓鐨勶紝姣斿鏀懼湪DLL閲?闈€備絾鏄紝鏈濂藉湪浠諱綍鏃跺欙紝鍙湁涓涓秷鎭驚鐜湪宸ヤ綔(鍏朵粬鐨勯兘琚樆濉炰簡)銆傜劧鍚庯紝鎴戜滑瑕佷綔濂界殑涓浠朵簨鎯咃紝灝辨槸鎬庝箞浠庢秷鎭驚鐜腑閫鍑猴紒褰撶劧鐢╓M_QUIT 鏄彲浠ユ媺~(PostThreadMessage涔熸槸涓ソ涓繪剰)錛岃繖涓秷鎭驚鐜鍑哄悗錛屽彲鑳界▼搴忛鍑猴紝涔熷彲鑳戒細嬋媧誨彟澶栦竴涓闃誨鐨勬秷鎭驚鐜紝紼嬪簭緇х畫榪?琛屻傝繖瑕佺湅浣犳庝箞鎯籌紝鎬庝箞鍘誨仛銆傛渶鍚庝竴涓秷鎭驚鐜粨鏉熺殑鏃跺欙紝涔熻灝辨槸紼嬪簭蹇粨鏉熺殑鏃跺欙紝鍥犱負涓葷嚎紼嬬殑鎵ц浠g爜涔熷揩瑕佸畬浜?闄ら潪BT鐨勫啀浣滀釜姝誨驚鐜?銆?/p>

NOTE: 璁﹚indows緋葷粺鐭ラ亾鍒涘緩涓涓嚎紼嬬殑鍞竴鏂規硶鏄皟鐢ˋPI CreatThread鍑芥暟(__beginthreadex涔嬬被鐨勯兘瑕佸湪鍐呴儴璋冪敤浠栧垱寤烘柊綰跨▼)銆傚ソ鍍弚indows鏍稿績緙栫▼璇達紝鍦╳in2000涓嬶紝 緋葷粺鐢–reateRemoteThread鍑芥暟鏉ュ垱寤虹嚎紼嬶紝CreateThread鍦ㄥ唴閮ㄨ皟鐢–reateRemoteThread銆備笉榪囪繖涓嶆槸浜夎 鐨勭劍鐐癸紝鑷沖皯win98涓婥reateRemoteThread騫朵笉鑳芥甯稿伐浣滐紝榪樻槸CreateThread涓繪寔澶у眬銆?/font>

3錛屽湪鏁翠釜娑堟伅寰幆鐨勬満鍒朵腑錛岃繕蹇呴』璋堝埌紿楀彛鍑芥暟鐨勫彲閲嶅叆鎬с備粈涔堟剰鎬濓紵灝辨槸紿楀彛鍑芥暟(浠栨槸涓洖璋冨嚱鏁?鐨勪唬鐮佷粈涔堟椂鍊欓兘鍙互琚郴緇?璋冪敤鑰呬竴鑸槸user32妯″潡)璋冪敤銆傛瘮濡傚湪紿楀彛榪囩▼涓紝鍚戣嚜宸辯殑紿楀彛SendMessage(***);閭d箞鎵ц榪囩▼鏄庢牱鐨勶紵
鎴戜滑鐭ラ亾錛孲endMessage鏄絳夊埌娑堟伅鍙戦佸茍琚洰鏍囩獥鍙f墽琛屽畬涔嬪悗鎵嶈繑鍥炵殑銆傞偅涔堢獥鍙e湪澶勭悊娑堟伅錛岀劧鍚庡張絳夊緟鍒氭墠鍙戦佸埌鏈獥鍙g殑娑堟伅琚鐞嗗悗涔嬪悗(SendMessage榪斿洖)鎵嶇戶緇線涓嬫墽琛岋紝紼嬪簭涓嶅氨浜掔浉姝婚攣浜嗗悧錛?
鍏?瀹炴槸涓嶄細鐨勩倃indows璁捐涓濂楅傚悎SendMessage鐨勭畻娉曪紝浠栧垽鏂鏋滃彂閫佺殑娑堟伅鏄睘浜庢湰綰跨▼鍒涘緩鐨勭獥鍙g殑錛岄偅涔堢洿鎺ョ敱user32妯″潡璋冪敤 紿楀彛鍑芥暟(鍙兘灝辨湁紿楀彛閲嶅叆)錛屽茍灝嗘秷鎭殑澶勭悊緇撴灉緇撴灉榪斿洖銆傝繖鏍峰仛浣撶幇浜嗙獥鍙i噸鍏ャ備笂闈㈢殑渚嬪瓙錛屾垜浠皟鐢⊿endMessage(***)鍙戦佹秷鎭埌鏈?紿楀彛錛岄偅涔堢獥鍙h繃紼嬪啀嬈¤璋冪敤錛屽鐞嗗畬娑堟伅涔嬪悗灝嗙粨鏋滆繑鍥烇紝鐒跺悗SendMessage涔嬪悗鐨勭▼搴忔帴鐫鎵ц銆傚浜庨潪闃熷垪娑堟伅錛屽鏋滄病鏈夌獥鍙i噸鍏ワ紝涓嶇煡閬撲細 鏄粈涔堟牱瀛愩?/p>

NOTE: 鐢變簬紿楀彛鐨勫彲閲嶅叆鎬с傚湪win32 SDK紼嬪簭涓簲灝介噺灝戠敤鍏ㄥ眬鍙橀噺鍜岄潤鎬佸彉閲忥紝鍥犱負鍦ㄧ獥鍙e嚱鏁版墽琛岃繃紼嬩腑鍙兘紿楀彛閲嶅叆錛屽鏋滈噸鍏ュ悗灝嗚繖浜涘彉閲忔敼浜嗭紝浣嗕綘鐨勭▼搴忓湪紿楀彛閲嶅叆榪斿洖涔嬪悗緇х畫鎵ц錛?鍙兘灝辨槸浣跨敤宸茬粡鏀瑰彉鐨勫叏灞鎴栭潤鎬佸彉閲忋傚湪MFC涓?鎵鏈夌獥鍙g殑紿楀彛鍑芥暟鍩烘湰涓婇兘鏄疉fxWndProc)錛屾寜鐓х被鐨勬濇兂榪涜浜嗙粍緇囷紝涓鑸彉閲忛兘鏄被涓?鐨勶紝濂界鐞嗙殑澶氥?/font>

4,MFC涓獥鍙g被(姣斿C**View,CFrameWnd絳?涓殑MessageBox鍑芥暟錛屼互鍙?AfxMessageBox鍑芥暟閮芥槸闃誨鍘熸湁鐨勬秷鎭驚鐜殑銆傜敱娑堟伅妗嗗唴閮ㄧ殑涓涓秷鎭驚鐜潵浠庢秷鎭槦鍒椾腑璇誨彇娑堟伅錛屽茍媧鵑佹秷鎭?鍜屾ā寮忓璇濇綾諱技)銆傚疄闄?涓婏紝榪欎簺娑堟伅鍑芥暟鏈緇堣皟鐢ㄧ殑鏄?:MessageBox錛屽畠鍦ㄦ秷鎭鍐呴儴瀹炵幇浜嗕竴涓秷鎭驚鐜?鍘熸湁鐨勪富紼嬪簭娑堟伅寰幆琚樆濉炰簡)銆傝鍧涗腑紕板埌榪囧嚑嬈″叧浜庤鏃?鍣ㄥ拰娑堟伅妗嗙殑闂錛岀湅涓嬮潰鐨勪唬鐮侊細
void CTest_recalclayoutView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
MessageBox("abc");
while(1); //璁捐涓涓寰幆
CView::OnTimer(nIDEvent);
}
鍜?璁㎡nTimer澶х害5縐掗挓寮瑰嚭涓涓秷鎭銆傞偅涔堬紝娑堟伅妗嗕笉鏂殑琚脊鍑烘潵錛屽彧瑕佹秷鎭涓嶈鍏抽棴錛岄偅涔堢▼搴忓氨涓嶄細榪涘叆姝誨驚鐜傚疄闄呬笂錛屾瘡嬈″脊鍑哄璇濇錛岄兘鏄?鏈涓婂眰鐨勯偅涓秷鎭鎺屾彙鐫娑堟伅寰幆錛屽叾浠栫殑娑堟伅寰幆琚樆濉炰簡銆傚彧瑕佷笉鍏抽棴鏈涓婇潰鐨勬秷鎭錛寃hile(1);灝卞緱涓嶅埌鎵ц銆傚鏋滅偣浜嗗叧闂紝紼嬪簭灝辮繘鍏ヤ簡姝?寰幆錛屽彧鑳界敤ctrl+alt+del鏉ヨВ鍐抽棶棰樹簡銆?/p>

5錛屾秷鎭驚鐜湪寰堝鍦版柟閮芥湁搴旂敤銆傛瘮濡傚簲鐢ㄥ湪綰跨▼姹犱腑銆備竴涓嚎紼嬬殑鎵ц鍛ㄦ湡涓鑸湪綰跨▼ 鍑芥暟榪斿洖涔嬪悗緇撴潫錛岄偅涔堟庝箞寤墮暱綰跨▼鐨勭敓鍛藉懆鏈熷憿錛熶竴縐嶆柟娉曞氨鏄寜鐓ф秷鎭驚鐜殑鎬濇兂錛屽湪綰跨▼涓姞鍏ユ秷鎭驚鐜紝涓嶆柇鍦頒粠綰跨▼闃熷垪璇誨彇娑堟伅錛屽茍澶勭悊娑堟伅錛岀嚎紼?鐨勭敓鍛藉懆鏈熷氨淇濇寔鐫鐩村埌榪欎釜娑堟伅寰幆鐨勯鍑恒?/p>

NOTE錛氬彧瑕佺嚎紼嬫湁鐣岄潰鍏冪礌鎴栬呰皟鐢℅etMessage,鎴栬呮湁綰跨▼娑堟伅鍙戦佽繃鏉ワ紝緋葷粺灝變細涓虹嚎紼嬪垱寤轟竴涓秷鎭槦鍒椼?/font>

 

6, 鍦ㄥ崟綰跨▼紼嬪簭涓紝濡傛灉瑕佹墽琛屼竴涓暱鏃墮棿鐨勫鏉傛搷浣滆屼笖鐣岄潰瑕佹湁鐩稿簲鐨勮瘽錛屽彲浠ヨ冭檻鐢ㄨ嚜宸辯殑娑堟伅娉點傛瘮濡傦紝鍙互灝嗕竴涓樆濉炵瓑寰呮搷浣滄斁鍦ㄤ竴涓驚鐜腑錛屽茍灝嗚秴鏃?鍊艱緗緱姣旇緝灝忥紝鐒跺悗姣忎釜絳夊緟鐨勭墖孌典腑鐢ㄦ秷鎭車緇х畫娑堟伅寰幆錛屼嬌鐣岄潰鑳藉鍝嶅簲鐢ㄦ埛鎿嶄綔銆傜瓑絳変箣綾伙紝閮藉彲浠ュ簲鐢ㄦ秷鎭車(璋冪敤涓涓被浼艱繖鏍風殑鍑芥暟)錛?br>BOOL CChildView::PeekAndPump()
{
MSG msg;
while(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
   if(!AfxGetApp()->PumpMessage())
   {
    ::PostQuitMessage(0);
    return false;
   }
}
return true;
}
鍏跺疄錛岀敤澶氱嚎紼嬩篃鑳借В鍐沖鏉傝繍綆楁椂鐨勭晫闈㈤棶棰橈紝浣嗘槸娌℃湁榪欎箞鏂逛究錛岃屼笖涓鑸鍔犲叆綰跨▼閫氫俊鍜屽悓姝ワ紝鑰冭檻鐨勪簨鎯呮洿澶氫竴鐐廣?/p>

 

緇間笂鎵榪幫紝MFC娑堟伅寰幆灝遍偅涔堝洖浜嬶紝涓昏鎬濇兂榪樻槸鍜孲DK涓樊涓嶅銆傝繖縐嶆濇兂涓昏鐨勭壒鐐硅〃鐜板湪榪庡悎MFC鏁翠釜妗嗘灦涓婏紝涓烘暣涓鏋舵湇鍔★紝涓哄簲鐢ㄥ拰鍔熻兘鏈嶅姟銆傝繖鏄垜鐨勭悊瑙c傚懙鍛祣



鏉庝簹 2007-12-17 20:28 鍙戣〃璇勮
]]>
娣誨姞涓婁笅鏂囪彍鍗曠殑鏂規硶 http://m.shnenglu.com/lilac/archive/2007/12/05/37878.html鏉庝簹鏉庝簹Wed, 05 Dec 2007 12:19:00 GMThttp://m.shnenglu.com/lilac/archive/2007/12/05/37878.htmlhttp://m.shnenglu.com/lilac/comments/37878.htmlhttp://m.shnenglu.com/lilac/archive/2007/12/05/37878.html#Feedback0http://m.shnenglu.com/lilac/comments/commentRss/37878.htmlhttp://m.shnenglu.com/lilac/services/trackbacks/37878.html棣栧厛瑕佸湪鍦ㄦ枃浠墮瀹氫箟鑿滃崟欏癸細
#define ID_MENU_EDIT   5001 
#define ID_MENU_DELETE 
5002
鐒跺悗娣誨姞瀵硅瘽妗嗙殑WM_CONTEXTMENU娑堟伅鍑芥暟錛屽嚱鏁板唴瀹逛負錛?br>
    CMenu menuPopup;
    
if(menuPopup.CreatePopupMenu())
    {
         menuPopup.AppendMenu(MF_STRING,ID_MENU_EDIT,
"淇敼(&E)");
         menuPopup.AppendMenu(MF_STRING,ID_MENU_DELETE,
"鍒犻櫎(&D)");
         menuPopup.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);    
    }
鐒跺悗瀹氫箟鑿滃崟鐩稿簲鍑芥暟,

1,鍦ㄥご鏂囦歡涓坊鍔犲嚱鏁板畾涔夎鍙ワ細

// Generated message map functions
 
//{{AFX_MSG(CAdo2Dlg)
 virtual BOOL OnInitDialog();
 afx_msg void onInfoEdit(); 
//  榪欎釜鏄紪杈戣彍鍗曠殑鍝嶅簲鍑芥暟
 afx_msg void onInfoDelete();  
//榪欎釜鏄垹闄よ彍鍗曠殑鍝嶅簲鍑芥暟
 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
 afx_msg void OnButton1();
 afx_msg void OnButton2();
 afx_msg void OnRdblclkList1(NMHDR
* pNMHDR, LRESULT* pResult);
 afx_msg void OnDblclkList1(NMHDR
* pNMHDR, LRESULT* pResult);
 afx_msg void OnContextMenu(CWnd
* pWnd, CPoint point);
 
//}}AFX_MSG
 DECLARE_MESSAGE_MAP()

 

2錛屽湪cpp鏂囦歡涓坊鍔犲嚱鏁頒綋錛?br>

void CAdo2Dlg::OnInfoEdit() 
{
    AfxMessageBox(
"edit");
}

void CAdo2Dlg::OnInfoDelete() 
{
    AfxMessageBox(
"delete");
}

 

3錛岀劧鍚庡湪cpp鏂囦歡涓坊鍔犲獎灝勶細

BEGIN_MESSAGE_MAP(CAdo2Dlg, CDialog)
    
//{{AFX_MSG_MAP(CAdo2Dlg)
    ON_COMMAND(ID_MENU_EDIT,    OnInfoEdit)
    ON_COMMAND(ID_MENU_DELETE,  OnInfoDelete)
    
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

 

鎵鏈夌殑宸ヤ綔瀹屾垚浜嗭紒



鏉庝簹 2007-12-05 20:19 鍙戣〃璇勮
]]>
VC鍔ㄦ侀摼鎺ュ簱鐨勫垱寤哄拰浣跨敤 http://m.shnenglu.com/lilac/archive/2007/12/05/37877.html鏉庝簹鏉庝簹Wed, 05 Dec 2007 12:18:00 GMThttp://m.shnenglu.com/lilac/archive/2007/12/05/37877.htmlhttp://m.shnenglu.com/lilac/comments/37877.htmlhttp://m.shnenglu.com/lilac/archive/2007/12/05/37877.html#Feedback0http://m.shnenglu.com/lilac/comments/commentRss/37877.htmlhttp://m.shnenglu.com/lilac/services/trackbacks/37877.html涓錛孧FC鎵╁睍DLL
鍒涘緩錛?br>1錛屾柊寤轟竴涓狹FC鎵╁睍DLL ,鍚嶅瓧涓篸ll5,娣誨姞澶存枃浠訛紝鍚嶄負dll5
2錛屽ご鏂囦歡涓姞鍏ワ細
extern __declspec(dllexport) CString concatA(CString x,CString y);
3錛屽湪cpp鏂囦歡涓姞鍏ワ細
extern __declspec(dllexport) CString concatA(CString x,CString y)
{
 return x + y;
}
4,鍦╟pp鏂囦歡涓姞鍏ワ細
#include "dll5.h"

5錛岀紪璇戯紝鐢熸垚dll
浣跨敤錛?br>1錛屾柊寤轟竴涓崟鏂囨。搴旂敤紼嬪簭錛屽悕涓篣sedll5
2,灝嗗垰鎵嶇敓鎴愮殑dll5.lib鏂囦歡鍜宒ll5.h鏂囦歡鎷瘋礉鍒板綋鍓嶅簲鐢ㄧ▼搴忚礬寰勪笅,
  灝哾ll5.dll 鏂囦歡鎷瘋礉鍒?褰撳墠搴旂敤紼嬪簭涓嬬殑debug涓?br>3錛屽湪褰撳墠搴旂敤紼嬪簭涓敤鍒拌dll5鐨勫鍑烘柟娉曪紙concatA)鐨勬枃浠訛紙鎴栫被錛変笂娣誨姞濡備笅璇彞錛?br>#include "dll5.h"
鍋囪灝嗗叾鍔犲埌 Usedll5View.cpp涓?br>4錛屽湪Usedll5View綾諱腑寤虹珛娑堟伅鏄犲皠鍏ュ彛錛屽湪娑堟伅鍑芥暟涓坊鍔犲涓嬭鍙ワ細
CString a=concatA("涓浗鍖楄濺闆嗗洟","闀挎槬杞ㄩ亾瀹㈣濺鑲′喚鏈夐檺鍏徃");
MessageBox(a);
5錛屽湪 宸ョ▼/璁劇疆/榪炴帴/瀵硅薄搴?妯″潡 涓姞鍏ワ細dll5.lib

6,緙栬瘧鎵ц璇ュ簲鐢ㄧ▼搴忥紝騫惰Е鍙戣娑堟伅錛屽垯杈撳嚭錛?/p>

涓浗鍖楄濺闆嗗洟闀挎槬杞ㄩ亾瀹㈣濺鑲′喚鏈夐檺鍏徃

涔嬪悗鍙瀹氫箟涓嶆洿鏀癸紝鍑芥暟浣撴棤璁烘庝箞鏇存敼銆傛垜浠彧瑕佸皢緙栬瘧濂界殑dll鎷瘋礉榪囨潵鍗沖彲銆傚鏋滃畾涔夋湁浜嗕慨鏀癸紝鍒欓渶瑕佸皢h鏂囦歡鍜宭ib 鏂囦歡鎷瘋礉榪囨潵錛屽茍闇瑕侀噸鏂扮紪璇戙?/p>

 

浜岋紝鍔ㄦ侀摼鎺ュ簱浣跨敤鍏變韓MFC DLL
鍒涘緩錛?br>1錛屾柊寤轟竴涓?DLL(閫?鍔ㄦ侀摼鎺ュ簱浣跨敤鍏變韓MFC DLL錛?
2錛屽ご鏂囦歡涓姞鍏ワ細
_declspec(dllexport) CString WINAPI concatA(CString x,CString y);
3錛屽湪cpp鏂囦歡鏈熬鍔犲叆錛?br>_declspec(dllexport) CString WINAPI concatA(CString x,CString y)
{
 return x + y;
}
4錛岀紪璇戯紝鐢熸垚dll
浣跨敤錛?br>1錛屾柊寤轟竴涓崟鏂囨。搴旂敤紼嬪簭錛屽悕涓篣sedll8
2,灝嗗垰鎵嶇敓鎴愮殑dll8.lib鏂囦歡鎷瘋礉鍒板綋鍓嶅簲鐢ㄧ▼搴忚礬寰勪笅,
  灝哾ll8.dll 鏂囦歡鎷瘋礉鍒?c:\winnt\system32涓?br>3錛屽湪褰撳墠搴旂敤紼嬪簭涓敤鍒拌dll5鐨勫鍑烘柟娉曪紙concatA)鐨?綾葷殑澶存枃浠朵笂娣誨姞濡備笅璇彞錛?br>extern CString WINAPI concatA(CString x,CString y);
鍋囪灝嗗叾鍔犲埌 Usedll8View.h涓?br>4錛屽湪Usedll8View綾諱腑寤虹珛娑堟伅鏄犲皠鍏ュ彛錛屽湪娑堟伅鍑芥暟涓坊鍔犲涓嬭鍙ワ細
CString a=concatA("涓浗鍖楄濺闆嗗洟","闀挎槬杞ㄩ亾瀹㈣濺鑲′喚鏈夐檺鍏徃");
MessageBox(a);
5錛屽湪 宸ョ▼/璁劇疆/榪炴帴/瀵硅薄搴?妯″潡 涓姞鍏ワ細dll8.lib
6,緙栬瘧鎵ц璇ュ簲鐢ㄧ▼搴忥紝騫惰Е鍙戣娑堟伅錛屽垯杈撳嚭錛?/p>

涓浗鍖楄濺闆嗗洟闀挎槬杞ㄩ亾瀹㈣濺鑲′喚鏈夐檺鍏徃



鏉庝簹 2007-12-05 20:18 鍙戣〃璇勮
]]>鐭ヨ瘑鐐規暣鐞嗛泦鍚?..http://m.shnenglu.com/lilac/archive/2007/11/25/37268.html鏉庝簹鏉庝簹Sun, 25 Nov 2007 03:55:00 GMThttp://m.shnenglu.com/lilac/archive/2007/11/25/37268.htmlUpdateData()鐨勪嬌鐢ㄦ柟娉?/strong>

         UpdateData錛堬級鍙湁涓涓狟OOL綾誨瀷鐨勫弬鏁幫紝UpdateData(FALSE)涓鑸敤浜庡璇濇鎺т歡榪炴帴鐨勫彉閲忓煎埛鏂板睆騫曟樉紺猴紱姣斿浣犲湪涓涓枃鏈涓婄粦瀹氫簡涓涓猰_member鍙橀噺錛岀敤UpdateData(FALSE);鍗沖彲鎶婅繖涓煎湪鏂囨湰妗嗛噷鏄劇ず鍑烘潵錛屽弽涔嬶紝UpdateData(TRUE);鑳芥妸濉叆鏂囨湰妗嗙殑 鍐呭璧嬪肩粰m_member.



鏉庝簹 2007-11-25 11:55 鍙戣〃璇勮
]]>
閫忔槑鐨凜heckBox鐨勪唬鐮?/title><link>http://m.shnenglu.com/lilac/archive/2007/11/23/37201.html</link><dc:creator>鏉庝簹</dc:creator><author>鏉庝簹</author><pubDate>Fri, 23 Nov 2007 05:21:00 GMT</pubDate><guid>http://m.shnenglu.com/lilac/archive/2007/11/23/37201.html</guid><wfw:comment>http://m.shnenglu.com/lilac/comments/37201.html</wfw:comment><comments>http://m.shnenglu.com/lilac/archive/2007/11/23/37201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/lilac/comments/commentRss/37201.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/lilac/services/trackbacks/37201.html</trackback:ping><description><![CDATA[<p>閫忔槑鐨凜heckBox錛屽熀綾繪槸CButton...<br>涓昏浠g爜濡備笅<br>OnPaint() <br>{<br> CPaintDC dc(this); // device context for painting<br>    <br>    // TODO: Add your message handler code here<br>    <br>    CRect rect;<br>    GetClientRect(&rect);</p> <p>    CRect BoxRect;<br>    BoxRect=rect;<br>    BoxRect.right =BoxRect.left +15;<br>    dc.DrawFrameControl(BoxRect,DFC_BUTTON,DFCS_BUTTONCHECK|GetCheck()?DFCS_CHECKED :0);</p> <p>    CFont   myFont;  <br>    myFont.CreatePointFont (120,_T("瀹嬩綋"));<br>    CFont   *pOldFont=(CFont   *)dc.SelectObject   (&myFont);  <br>    dc.SetBkMode(TRANSPARENT);   <br>    <br>    CString StrWndText;<br>    GetWindowText(StrWndText);</p> <p>    rect.OffsetRect (20,0);<br>    dc.DrawText(StrWndText,   rect,   DT_LEFT|DT_VCENTER|DT_SINGLELINE);   <br>    dc.SelectObject   (pOldFont);  <br>    myFont.DeleteObject   ();  <br>    // Do not call CButton::OnPaint() for painting messages<br>}</p> <img src ="http://m.shnenglu.com/lilac/aggbug/37201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/lilac/" target="_blank">鏉庝簹</a> 2007-11-23 13:21 <a href="http://m.shnenglu.com/lilac/archive/2007/11/23/37201.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://107766a.com" target="_blank">欧美视频一区二区在线观看</a>| <a href="http://9xxpp.com" target="_blank">亚洲国内自拍</a>| <a href="http://ridenimbus.com" target="_blank">亚洲欧美日韩一区在线观看</a>| <a href="http://wnboke.com" target="_blank">亚洲激情不卡</a>| <a href="http://www87bbw.com" target="_blank">亚洲风情亚aⅴ在线发布</a>| <a href="http://1177898.com" target="_blank">你懂的国产精品永久在线</a>| <a href="http://022291.com" target="_blank">女同性一区二区三区人了人一 </a>| <a href="http://3531888.com" target="_blank">国产毛片精品国产一区二区三区</a>| <a href="http://1323666.com" target="_blank">欧美日本国产</a>| <a href="http://www-33tt.com" target="_blank">国产精品一区久久久</a>| <a href="http://by4425.com" target="_blank">国产主播喷水一区二区</a>| <a href="http://xingmaipet.com" target="_blank">在线观看欧美日韩</a>| <a href="http://4448884.com" target="_blank">一区二区三区久久网</a>| <a href="http://wwwgay456.com" target="_blank">亚洲影视在线</a>| <a href="http://mimi78.com" target="_blank">欧美aaa级</a>| <a href="http://kgg93.com" target="_blank">99伊人成综合</a>| <a href="http://sihu121.com" target="_blank">久久精品一区</a>| <a href="http://alex-bruni.com" target="_blank">欧美日韩在线三区</a>| <a href="http://794278.com" target="_blank">国产一区二区久久久</a>| <a href="http://www-787333.com" target="_blank">1000部精品久久久久久久久</a>| <a href="http://buyiker.com" target="_blank">亚洲精品一品区二品区三品区</a>| <a href="http://dy25777.com" target="_blank">洋洋av久久久久久久一区</a>| <a href="http://wanmajc.com" target="_blank">久久超碰97中文字幕</a>| <a href="http://airsixth.com" target="_blank">欧美成人激情视频</a>| <a href="http://www-4997.com" target="_blank">夜夜爽夜夜爽精品视频</a>| <a href="http://978769.com" target="_blank">久久精品国产96久久久香蕉</a>| <a href="http://huabiseeds.com" target="_blank">欧美精品18videos性欧美</a>| <a href="http://baigoso.com" target="_blank">在线精品国产成人综合</a>| <a href="http://0773ye.com" target="_blank">久久久伊人欧美</a>| <a href="http://www-333410.com" target="_blank">亚洲精品久久久蜜桃</a>| <a href="http://xindefalv.com" target="_blank">另类天堂av</a>| <a href="http://zd-jm.com" target="_blank">国产一区二区成人</a>| <a href="http://78gde.com" target="_blank">欧美激情一二三区</a>| <a href="http://quintostdio.com" target="_blank">欧美亚洲在线观看</a>| <a href="http://www87bbw.com" target="_blank">国产日韩精品久久久</a>| <a href="http://yiqiluntan.com" target="_blank">亚洲春色另类小说</a>| <a href="http://wwwjuhuase.com" target="_blank">亚洲精品一区二区三</a>| <a href="http://133868.com" target="_blank">性视频1819p久久</a>| <a href="http://www218999.com" target="_blank">欧美剧在线免费观看网站</a>| <a href="http://yiluee.com" target="_blank">国内精品久久久久久久果冻传媒 </a>| <a href="http://mimi78.com" target="_blank">亚洲影院色无极综合</a>| <a href="http://977mo.com" target="_blank">久久综合色播五月</a>| <a href="http://www57669.com" target="_blank">国产亚洲欧美日韩一区二区</a>| <a href="http://cnxwlm.com" target="_blank">亚洲视频一区二区在线观看</a>| <a href="http://961318.com" target="_blank">欧美第一黄网免费网站</a>| <a href="http://aijiaoji.com" target="_blank">欧美资源在线</a>| <a href="http://0370city.com" target="_blank">国产美女一区</a>| <a href="http://gffffg.com" target="_blank">亚洲欧美国产毛片在线</a>| <a href="http://y4088.com" target="_blank">亚洲免费观看在线观看</a>| <a href="http://tp112.com" target="_blank">欧美国产免费</a>| <a href="http://y7y7s.com" target="_blank">亚洲国产综合91精品麻豆</a>| <a href="http://1390744.com" target="_blank">久久久午夜视频</a>| <a href="http://tp112.com" target="_blank">亚洲视频欧美视频</a>| <a href="http://4449992.com" target="_blank">99人久久精品视频最新地址</a>| <a href="http://www-4157.com" target="_blank">欧美.日韩.国产.一区.二区</a>| <a href="http://133868.com" target="_blank">伊人久久成人</a>| <a href="http://ccc159.com" target="_blank">欧美阿v一级看视频</a>| <a href="http://www-67499.com" target="_blank">久久久久一区</a>| <a href="http://wwwmiya118.com" target="_blank">国内精品视频在线播放</a>| <a href="http://jafzjz.com" target="_blank">久久久99国产精品免费</a>| <a href="http://91sp136.com" target="_blank">亚洲欧美综合精品久久成人</a>| <a href="http://300644.com" target="_blank">国产精品美女久久久免费</a>| <a href="http://sexx777.com" target="_blank">午夜国产一区</a>| <a href="http://bandycup.com" target="_blank">午夜欧美视频</a>| <a href="http://ww323.com" target="_blank">国模精品一区二区三区色天香</a>| <a href="http://tt5125.com" target="_blank">欧美在线视频日韩</a>| <a href="http://51120guahao.com" target="_blank">亚洲欧美国产不卡</a>| <a href="http://www-878899.com" target="_blank">国产精品自拍视频</a>| <a href="http://actskynet.com" target="_blank">新片速递亚洲合集欧美合集</a>| <a href="http://004ttt.com" target="_blank">一区二区三区四区国产</a>| <a href="http://2ejj.com" target="_blank">国产精品海角社区在线观看</a>| <a href="http://8x1080x.com" target="_blank">亚洲欧美日韩精品在线</a>| <a href="http://miaoxp.com" target="_blank">亚洲一区二区不卡免费</a>| <a href="http://sortxz.com" target="_blank">国产欧美一区二区三区在线看蜜臀 </a>| <a href="http://xiphosoft.com" target="_blank">久久精品二区三区</a>| <a href="http://by56677.com" target="_blank">亚洲自拍偷拍色片视频</a>| <a href="http://313cq.com" target="_blank">国产农村妇女精品一区二区</a>| <a href="http://huohuoglobal.com" target="_blank">欧美在线91</a>| <a href="http://huokemima.com" target="_blank">久久久久国内</a>| <a href="http://520844www.com" target="_blank">99精品国产高清一区二区</a>| <a href="http://seo8138.com" target="_blank">久久中文字幕一区</a>| <a href="http://www333444123.com" target="_blank">欧美jizz19hd性欧美</a>| <a href="http://678255.com" target="_blank">日韩午夜三级在线</a>| <a href="http://filmcameralibrary.com" target="_blank">欧美精品一区二区三区在线播放 </a>| <a href="http://4388x3.com" target="_blank">亚洲电影观看</a>| <a href="http://szywsj.com" target="_blank">免费在线亚洲</a>| <a href="http://65kf.com" target="_blank">欧美国产一区在线</a>| <a href="http://1397979.com" target="_blank">一区二区日韩欧美</a>| <a href="http://maoming365.com" target="_blank">一区二区三区产品免费精品久久75</a>| <a href="http://www-q28.com" target="_blank">亚洲国产欧美一区二区三区久久</a>| <a href="http://yiqiluntan.com" target="_blank">嫩草国产精品入口</a>| <a href="http://caofujia.com" target="_blank">亚洲一区二区精品在线观看</a>| <a href="http://www-57549.com" target="_blank">亚洲欧美日韩一区二区在线</a>| <a href="http://www-13413.com" target="_blank">伊人久久婷婷</a>| <a href="http://hg98688.com" target="_blank">亚洲美女在线观看</a>| <a href="http://2302345.com" target="_blank">国产日韩专区</a>| <a href="http://nebnb89.com" target="_blank">亚洲日本va午夜在线电影</a>| <a href="http://583775.com" target="_blank">欧美精品在欧美一区二区少妇</a>| <a href="http://www18bbav.com" target="_blank">亚洲一级在线观看</a>| <a href="http://jsgf444.com" target="_blank">久久香蕉精品</a>| <a href="http://69ru.com" target="_blank">欧美一区1区三区3区公司</a>| <a href="http://777777hb.com" target="_blank">久久综合九色九九</a>| <a href="http://340996.com" target="_blank">亚洲图中文字幕</a>| <a href="http://97gaoba.com" target="_blank">欧美专区在线观看一区</a>| <a href="http://www-116036.com" target="_blank">亚洲美女中出</a>| <a href="http://by2866.com" target="_blank">久久久五月天</a>| <a href="http://shno1steel.com" target="_blank">99综合电影在线视频</a>| <a href="http://sishengnv.com" target="_blank">亚洲欧美日韩精品一区二区 </a>| <a href="http://baoyu1313.com" target="_blank">欧美一区二区视频免费观看</a>| <a href="http://18p2.com" target="_blank">久热精品在线</a>| <a href="http://wwwby113.com" target="_blank">久久国产精品亚洲77777</a>| <a href="http://bodabloc.com" target="_blank">欧美激情久久久久</a>| <a href="http://aberyco.com" target="_blank">久久女同互慰一区二区三区</a>| <a href="http://by777117.com" target="_blank">欧美午夜精品伦理</a>| <a href="http://223533.com" target="_blank">亚洲国产精品一区二区www</a>| <a href="http://wwwmiya118.com" target="_blank">国产午夜精品全部视频在线播放</a>| <a href="http://smdzs.com" target="_blank">亚洲高清资源综合久久精品</a>| <a href="http://www30bxbx.com" target="_blank">国产视频一区欧美</a>| <a href="http://emu160.com" target="_blank">亚洲视频中文字幕</a>| <a href="http://238918.com" target="_blank">日韩午夜高潮</a>| <a href="http://neudlac.com" target="_blank">久热国产精品视频</a>| <a href="http://5252bnet.com" target="_blank">久久一区二区三区四区五区</a>| <a href="http://whaylan.com" target="_blank">欧美午夜精品一区二区三区</a>| <a href="http://hs045.com" target="_blank">亚洲肉体裸体xxxx137</a>| <a href="http://tigerpowerinc.com" target="_blank">激情综合激情</a>| <a href="http://77xyc77.com" target="_blank">亚洲午夜羞羞片</a>| <a href="http://114499com.com" target="_blank">久久综合成人精品亚洲另类欧美</a>| <a href="http://wwwavtb1122.com" target="_blank">欧美一级视频精品观看</a>| <a href="http://huxiu123.com" target="_blank">欧美日韩精品一区二区在线播放</a>| <a href="http://xvideoxxnx.com" target="_blank">免播放器亚洲一区</a>| <a href="http://boocnn.com" target="_blank">国内精品视频666</a>| <a href="http://cca22.com" target="_blank">久久成人久久爱</a>| <a href="http://unrealcopgmail.com" target="_blank">久久国产精品久久久</a>| <a href="http://aabbcc11.com" target="_blank">国产精品久久久久久久久久久久久</a>| <a href="http://www-14333.com" target="_blank">亚洲丰满在线</a>| <a href="http://hjersqc.com" target="_blank">日韩一区二区精品视频</a>| <a href="http://ccc3636.com" target="_blank">欧美电影打屁股sp</a>| <a href="http://1313js.com" target="_blank">亚洲激情六月丁香</a>| <a href="http://wwwsao117.com" target="_blank">国产精品久久久久久影院8一贰佰 国产精品久久久久久影视 </a>| <a href="http://hicao32.com" target="_blank">一区二区三区自拍</a>| <a href="http://www-14333.com" target="_blank">久久久免费精品视频</a>| <a href="http://sishengnv.com" target="_blank">欧美日韩综合久久</a>| <a href="http://422608.com" target="_blank">六月天综合网</a>| <a href="http://aotaotao.com" target="_blank">狠狠爱综合网</a>| <a href="http://ooonefteprompellets.com" target="_blank">午夜精品一区二区三区在线视</a>| <a href="http://7782y.com" target="_blank">亚洲自拍都市欧美小说</a>| <a href="http://4545www.com" target="_blank">欧美日韩岛国</a>| <a href="http://writeingo.com" target="_blank">日韩手机在线导航</a>| <a href="http://xunlei520.com" target="_blank">国产精品99久久久久久久久 </a>| <a href="http://830085.com" target="_blank">久久久激情视频</a>| <a href="http://czhqwy.com" target="_blank">久久久水蜜桃</a>| <a href="http://www-440447.com" target="_blank">激情综合激情</a>| <a href="http://163263.com" target="_blank">久久婷婷国产综合精品青草</a>| <a href="http://ncyy4.com" target="_blank">欧美乱妇高清无乱码</a>| <a href="http://ca88tv.com" target="_blank">亚洲国产一区二区a毛片</a>| <a href="http://tefahsop.com" target="_blank">国产九九视频一区二区三区</a>| <a href="http://aa224.com" target="_blank">激情综合色丁香一区二区</a>| <a href="http://qiruiwangluo.com" target="_blank">国产精品免费看</a>| <a href="http://leohacks.com" target="_blank">国产亚洲制服色</a>| <a href="http://www-188444.com" target="_blank">亚洲国产欧美久久</a>| <a href="http://wwwavtb2049.com" target="_blank">91久久久久久久久</a>| <a href="http://bjrailtech.com" target="_blank">91久久国产综合久久91精品网站</a>| <a href="http://www-ty177.com" target="_blank">久久国产婷婷国产香蕉</a>| <a href="http://yimeimc.com" target="_blank">欧美亚洲免费在线</a>| <a href="http://498626.com" target="_blank">国产午夜久久久久</a>| <a href="http://10669p.com" target="_blank">久久这里只有精品视频首页</a>| <a href="http://55kam.com" target="_blank">亚洲黄色av一区</a>| <a href="http://6633kj.com" target="_blank">欧美日韩人人澡狠狠躁视频</a>| <a href="http://hg4958.com" target="_blank">一区二区三区视频在线</a>| <a href="http://feiniao168.com" target="_blank">欧美一站二站</a>| <a href="http://wwwcao88.com" target="_blank">亚洲三级视频</a>| <a href="http://trhht.com" target="_blank">国产精品主播</a>| <a href="http://haose23.com" target="_blank">欧美成人高清</a>| <a href="http://teloregen.com" target="_blank">亚洲综合色在线</a>| <a href="http://zzmzit.com" target="_blank">亚洲高清视频一区二区</a>| <a href="http://25axxa.com" target="_blank">亚洲一区二区高清</a>| <a href="http://11b29.com" target="_blank">亚洲第一福利视频</a>| <a href="http://tongrenyaoye.com" target="_blank">国产精品高潮呻吟久久</a>| <a href="http://373gg.com" target="_blank">久久这里只有</a>| <a href="http://566805.com" target="_blank">亚洲欧美三级伦理</a>| <a href="http://www-232323.com" target="_blank">亚洲国产一区二区三区青草影视</a>| <a href="http://fobdoer.com" target="_blank">性欧美1819sex性高清</a>| <a href="http://689558.com" target="_blank">亚洲人成网站在线观看播放</a>| <a href="http://shwazrbjd.com" target="_blank">国产精品日韩一区</a>| <a href="http://shanghaijiagu.com" target="_blank">久久亚洲综合网</a>| <a href="http://vipaqdx29.com" target="_blank">亚洲欧美精品在线</a>| <a href="http://26cs.com" target="_blank">亚洲美女视频</a>| <a href="http://xhtd688.com" target="_blank">欧美激情a∨在线视频播放</a>| <a href="http://342008.com" target="_blank">校园春色国产精品</a>| <a href="http://85041960.com" target="_blank">99成人在线</a>| <a href="http://www35211.com" target="_blank">亚洲高清精品中出</a>| <a href="http://nvpuwo22.com" target="_blank">亚洲欧美不卡</a>| <a href="http://833816.com" target="_blank">蜜桃精品久久久久久久免费影院</a>| <a href="http://216667.com" target="_blank">欧美日韩成人综合在线一区二区 </a>| <a href="http://dtwave-ind.com" target="_blank">av成人免费观看</a>| <a href="http://miandoctor.com" target="_blank">亚洲国产cao</a>| <a href="http://y66776.com" target="_blank">欧美精品一区二区三区在线看午夜</a>| <a href="http://aabbcc11.com" target="_blank">亚洲福利视频一区二区</a>| <a href="http://798200.com" target="_blank">亚洲精品日本</a>| <a href="http://qiansemf.com" target="_blank">欧美午夜不卡在线观看免费</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>