• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            一、VC6.0操作步驟:
            1.將下面XML代碼復制并保存名為XPStyle.manifest的文件
            <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
            <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
              <assemblyIdentity
                  version="1.0.0.0"
                  processorArchitecture="X86"
                  name="Microsoft.Windows.WorkSapceName"
                  type="win32"
            />
              <description>Your app description here</description>
              <dependency>
                <dependentAssembly>
                  <assemblyIdentity
                      type="win32"
                      name="Microsoft.Windows.Common-Controls"
                      version="6.0.0.0"
                      processorArchitecture="X86"
                      publicKeyToken="6595b64144ccf1df"
                      language="*"
                    />
                </dependentAssembly>
              </dependency>
            </assembly>
            2.將該文件復制到工程文件夾中的rec文件夾中。
            3.工程->添加到工程->將rec文件夾中的XPStyle.manifest文件添加到工程中。
            4.打開resource.h文件,將下面兩行代碼復制并粘貼
            #define IDR_MANIFEST                    1
            #define RT_MANIFEST                     24

            5.打開工程中的.rc文件,將下面一行代碼加入到該文件中
            IDR_MANIFEST RT_MANIFEST MOVEABLE PURE "res\\XPStyle.manifest"
            6.重新編譯鏈接,OK成功。

            二、VS2005環(huán)境下操作方法與步驟

            VS 2005中,如果Project->Property  -- General -- Character Set 為Use Unicode Character Set,那么程序的界面自然就是XP風格,不需要手動添加任何東西。但是如果這里是Use Multi-Byte Character Set,那么就要自己動手加東西了,和上面操作差不多。

            1.將下面XML代碼復制并保存名為XPStyle.manifest的文件
            <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
            <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
              <assemblyIdentity
                  version="1.0.0.0"
                  processorArchitecture="X86"
                  name="Microsoft.Windows.WorkSapceName"
                  type="win32"
            />
              <description>Your app description here</description>
              <dependency>
                <dependentAssembly>
                  <assemblyIdentity
                      type="win32"
                      name="Microsoft.Windows.Common-Controls"
                      version="6.0.0.0"
                      processorArchitecture="X86"
                      publicKeyToken="6595b64144ccf1df"
                      language="*"
                    />
                </dependentAssembly>
              </dependency>
            </assembly>

            2.將該文件復制到工程文件夾中的rec文件夾中。
            3.工程->添加到工程->將rec文件夾中的XPStyle.manifest文件添加到工程中。
            4.Rebuild.....就可以了。

            posted @ 2010-04-13 20:54 wrh 閱讀(870) | 評論 (0)編輯 收藏
            編譯頭文件:STDAFX.CPP,STDAFX.H  
               
              這兩個文件用于建立一個預編譯的頭文件.PCH和一個預定義的類型文件STDAFX.OBJ。由于MFC體系結構非常大,包含許多頭文件,如果每次都編譯的話比較費時。因此,我們把常用的MFC頭文件都放在stdafx.h中,如afxwin.h、afxext.h、afxdisp.h、afxcmn.h等,然后讓stdafx.cpp包含這個stdafx.h文件。這樣,由于編譯器可以識別哪些文件已經(jīng)編譯過,所以stdafx.cpp就只編譯一次,并生成所謂的預編譯頭文件(因為它存放的是頭文件編譯后的信息,故名)。如果讀者以后在編程時不想讓有些MFC頭文件每次都被編譯,也可以將它加入到stdafx.h中。采用預編譯頭文件可以加速編譯過程。
            posted @ 2010-02-25 11:11 wrh 閱讀(490) | 評論 (0)編輯 收藏
            工作中碰到這樣一個問題,
            程序報錯:
            Error    3    error C2668: 'wvsprintfW' : ambiguous call to overloaded function
            這個錯誤的意思是:wvsprintfW有重載函數(shù),根據(jù)目前的參數(shù)編譯器無法確定調(diào)用哪個。

            wvsprintfW屬于系統(tǒng)函數(shù),自己也沒有重載過,理應不該有這樣的問題,
            可能是包含的頭文件太多,有的文件對此函數(shù)重載過。

            網(wǎng)上有人舉例說:
            int fun(int,int);
            float fun(int,int); //編譯器就會出現(xiàn)錯誤 不知道到底調(diào)用哪個函數(shù)

            這里的錯誤可能不是上述類型的,但這個例子可以幫助理解。

            最終解決方法是:在調(diào)用的wvsprintfW前加” :: “符號,指明采用全局函數(shù),這樣編譯器就不需做選擇了。

            法2
            函數(shù)調(diào)用有二義行。
            在參數(shù)前加類型轉換
            posted @ 2010-02-24 14:42 wrh 閱讀(3195) | 評論 (0)編輯 收藏

            一、找到一個方法:

            VC6---選項Project | Configuration Properties | C/C++ | Preprocessor | Preprocessor Definitions
            添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE

            VS2005 項目屬性---C/++ --->預處理定義下-》配置 -》下面添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE兩個宏

            或調(diào)用VS2005鼓吹的那些帶“_s”后綴的非標準函數(shù),即在其后加上"_S",如sprintf_s
            或文件最開始:
            #define _CRT_SECURE_NO_DEPRECATE
            或者干粹在工程屬性中設置。
            二、

            在vs2003, vs2005中 用sprintf 會出現(xiàn)   warning C4996: 'sprintf' was declared deprecated see declaration of 'sprintf' 的警告 消除方法

            1: 文件最開始: #define _CRT_SECURE_NO_DEPRECATE 或者干粹在工程屬性中設置如一中所說。

            2: 不屏蔽的話就只能調(diào)用VS鼓吹的那些帶“_s”后綴的非標準函數(shù)。例如sprintf_s在函數(shù)后面加_s

            3: 用StringCchPrintf

             

            三、關鍵詞Security    Enhancements    in    the    CRT                                          

             

            將過去的工程用VS2005打開的時候。你有可能會遇到一大堆的警告:warning C4996。
            比如:warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.

            原因是Visual C++ 2005使用了更加安全的run-time library routines。
            新的Security CRT functions(就是那些帶有“_s”后綴的函數(shù)):
            http://msdn2.microsoft.com/en-us/library/wd3wzwts(VS.80).aspx

            那么如何搞定這些警告呢:
            方法一:手工將原來的舊函數(shù)替換成新的Security CRT functions。
            方法二:屏蔽這個警告。
                        在預編譯頭文件stdafx.h里(注意:一定要在沒有include任何頭文件之前)定義下面的宏:
                        #define _CRT_SECURE_NO_DEPRECATE
                        或者#param warning(disable:4996)

            方法二沒有使用新的更安全的CRT函數(shù),顯然不是一個值得推薦的方法,可是你又不想一個一個地改。
            那么還有一個更方便的方法:

            在預編譯頭文件stdafx.h里(同樣要在沒有include任何頭文件之前)定義下面的宏:
            #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
            鏈接的時候便會自動將舊函數(shù)替換成
            Security CRT functions。
            注意:這個方法雖然使用了新的函數(shù),但是不能消除警告(原因見紅字),你還得同時使用方法二。。。

             

            在網(wǎng)上搜索到的最常用的解決方案,那就是定義 _CRT_SECURE_NO_DEPRECATE _SCL_SECURE_NO_DEPRECATE 來禁止vc2005對此產(chǎn)生警告(依然使用的是非安全庫!0顯然并不是一個好的解決方案)。而且如果使用了ATL,則還需要定義 _ATL_SECURE_NO_DEPRECATE 使用了MFC則需要定義 _AFX_SECURE_NO_DEPRECATE
               
            然而盡管如此,更好的解決方案只需要定義一個宏 _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES, 那么vc將會自動替換使用他們的Safe Library來代替C/C++標準庫(strcat將被strcat_f來取代)。

             

                即使使用了_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES,代碼將依舊不夠安全:(, 對此,ms提出了如下10點建議:
                1.
            不要認為 strcpy_s strncpy_s( 以及其他的字符串函數(shù))(在空間不夠的時候)會自動終止拷貝(truncate截斷,不截斷則意味著溢出).如果需要自動截斷,請使用strncpy_s (同時使用_TRUNCATE作為長度參數(shù))。
                2.
            記住fopen_s缺省是獨占模式。如需共享使用文件,應該使用_sopen
                3.
            別忘了_dupenv_s, 它將比_getenv_s更容易使用,因為它能自動分配一個正確長度的內(nèi)存(buffer)。
                4.
            scanf_s中小心參數(shù)順序。
                5.
            確定printf_s中格式字符串的正確。
                6.
            使用_countof(x)來取代sizeof(x)/sizeof(element). _countof將會正確的計算元素個數(shù),而且如果x是一個指針,編譯器將會發(fā)出一個警告(來提醒程序員,僅針對C++編譯)
                7.
            記住所有的sizes(大小,非長度)都是使用characters(字符,unicode下一個字符占2byte)作為單位,而不是bytes(字節(jié)).
                8.
            記住所有的sizes(大小,非長度,緣由同上)包含了字符串結束符'\0'(即別忘了很多情況下size需要+1)。
                9.
            調(diào)試的時候監(jiān)視數(shù)據(jù)0xfd (在調(diào)試版本下)0xfd將會被填充在數(shù)據(jù)(buffer,通常是字符串)的結尾處。如果運行非你所愿,可能會得到一個長度錯誤。
                10.
            檢查所有的錯誤。 許多新函數(shù)相比舊函數(shù),能返回(表示)錯誤信息(的數(shù)值)

            posted @ 2010-02-24 14:42 wrh 閱讀(4815) | 評論 (0)編輯 收藏

            查閱各種資料的標準做法似乎為
            CString       a;      
                int       b;      
                a.Format( "%d ",b);      
                TEXTOUT(a);

            但我使用這種方法總是提示編譯錯誤
            c:\documents   and   settings\administrator\my   documents\visual   studio   2005\projects\imageprocess\imageprocess\imageprocessview.cpp(137)   :   error   C2664:   'void   ATL::CStringT <BaseType,StringTraits> ::Format(const   wchar_t   *,...) '   :   cannot   convert   parameter   1   from   'const   char   [3] '   to   'const   wchar_t   * '
                            with
                            [
                                    BaseType=wchar_t,
                                    StringTraits=StrTraitMFC_DLL <wchar_t>
                            ]
                            Types   pointed   to   are   unrelated;   conversion   requires   reinterpret_cast,   C-style   cast   or   function-style   cast


            /////////////////////////////////////////
            解決方法:
            cannot   convert   parameter   1   from   'const   char   [3] '   to   'const   wchar_t   * '

            從這個看你可能采用了UNICODE編碼,
            可以用
            a.Format(L "%d ",   b);
            或者
            a.Format(_T( "%d "),   b);

            貼子來源Diy部落(http://bbs.diybl.com) 詳細出處參考:http://bbs.diybl.com/dview61t13393.html

            posted @ 2010-02-24 10:23 wrh 閱讀(12730) | 評論 (1)編輯 收藏

            法1.for(int   nIndex=0;nIndex<m_List.GetHeaderCtrl()->GetItemCount();nIndex++)  
              m_List.DeleteColumn(0);  
            法2.Example  
              //   The   pointer   to   my   list   view   control.  
              extern   CListCtrl*   pmyListCtrl;  
               
              int   nColumnCount   =   pmyListCtrl->GetHeaderCtrl()->GetItemCount();  
               
              //   Delete   all   of   the   columns.  
              for   (int   i=0;i   <   nColumnCount;i++)  
              {  
                    pmyListCtrl->DeleteColumn(0);  
              }  
               
               
              還有一個:  
               
              while   (pmyListCtrl->DeleteColumn(0));

            posted @ 2010-02-24 10:22 wrh 閱讀(4598) | 評論 (0)編輯 收藏

            CString 轉 wchar_t

            CString path = "asdf";

            wchar_t wstr[256] = path.AllocSysString();

            或者:

            wchar_t wcstring[256];

            MultiByteToWideChar(CP_ACP,0,path,-1,wcstring,256);

            wchar_t轉CString

            WideCharToMultiByte(CP_ACP,0,wcstring,256,

            path.GetBuffer(0),256,NULL,NULL);

            path.ReleaseBuffer(0);

             

            string 轉 CString
            CString.format("%s", string.c_str());

            char 轉 CString
            CString.format("%s", char*);

            char 轉 string
            string s(char *);

            string 轉 char *
            char *p = string.c_str();

            CString 轉 string
            string s(CString.GetBuffer());

            CString   str   =   "fdjfdas";   
            string   s   =   (LPCTSTR)str;

            1,string -> CString
            CString.format("%s", string.c_str());
            用c_str()確實比data()要好.
            2,char -> string
            string s(char *);
            你的只能初始化,在不是初始化的地方最好還是用assign().
            3,CString -> string
            string s(CString.GetBuffer());
            GetBuffer()后一定要ReleaseBuffer(),否則就沒有釋放緩沖區(qū)所占的空間.


            《C++標準函數(shù)庫》中說的
            有三個函數(shù)可以將字符串的內(nèi)容轉換為字符數(shù)組和C—string
            1.data(),返回沒有”\0“的字符串數(shù)組
            2,c_str(),返回有”\0“的字符串數(shù)組
            3,copy()

            ---------------------------------------------------------------

            CString與int、char*、char[100]之間的轉換- -


            CString與int、char*、char[100]之間的轉換- -

            CString互轉int

            將字符轉換為整數(shù),可以使用atoi、_atoi64或atol。
            而將數(shù)字轉換為CString變量,可以使用CString的Format函數(shù)。如
            CString s;
            int i = 64;
            s.Format("%d", i)
            Format函數(shù)的功能很強,值得你研究一下。

            void CStrDlg::OnButton1()
            {
            // TODO: Add your control notification handler code here
            CString ss="1212.12";
            int temp=atoi((char*)LPCTSTR(ss));

            CString aa;
            aa.Format("%d",temp);
            AfxMessageBox("var is " + aa);
            }

            sart.Format("%s",buf);

            CString互轉char*

            ///char * TO cstring
            CString strtest;
            char * charpoint;
            charpoint="give string a value";
            strtest=charpoint;


            ///CString TO char *
            charpoint=strtest.GetBuffer(strtest.GetLength());

            標準C里沒有string,char *==char []==string

             

            char *轉成CString

            可以用CString.Format("%s",char *)這個方法來將char *轉成CString。

            CString轉成char *

            用操作符(LPCSTR)strtest 或者 (char*)(LPCSTR)strtest 就可以了。


            CString轉換 char[100]

            char a[100];
            CString str("aaaaaa");
            strncpy(a,(LPCTSTR)str,sizeof(a));

            Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1570001

            (一) 概述

            string和CString均是字符串模板類,string為標準模板類(STL)定義的字符串類,已經(jīng)納入C++標準之中;

            CString(typedef CStringT > CString)為Visual C++中最常用的字符串類,繼承自CSimpleStringT類,主要應用在MFC和ATL編程中,主要數(shù)據(jù)類型有char(應用于ANSI),wchar_t(unicode),TCHAR(ANSI與unicode均可);

            char*為C編程中最常用的字符串指針,一般以'\0'為結束標志;

            (二) 構造

            string是方便的,可以從幾乎所有的字符串構造而來,包括CString和char*;

            CString次之,可以從基本的一些字符串變量構造而來,包括char*等;

            char*沒有構造函數(shù),僅可以賦值;

            舉例:

            char* psz = “joise”;

            CString cstr( psz );

            string str( cstr );

            (三) 運算符重載

            a) operator=

            string是最方便的,幾乎可以直接用所有的字符串賦值,包括CString和char*;

            CString次之,可以直接用些基本的字符串賦值,包括char*等;

            char*只能由指針賦值,并且是極危險的操作,建議使用strcpy或者memcpy,而且char*在聲明的時候如未賦初值建議先設為NULL,以避免野指針,令你抓狂;

            舉例:

            char *psz = NULL;

            psz = new char[10]; //當然,以上的直接寫成char *psz = new char[10];也是一樣

            memset( psz, 0, 10 );

            strcpy( psz, “joise” );

            CString cstr;

            cstr = psz;

            string str;

            str = psz;

            str = cstr;

            delete []psz;

            b) operator+

            string與CString差不多,可以直接與char*進行加法,但不可以相互使用+運算符,即string str = str + cstr是非法的,須轉換成char*;

            char*沒有+運算,只能使用strcat把兩個指針連在一起;

            舉例:

            char* psz = “joise”;

            CString cstr = psz;

            cstr = cstr + psz;

            string str = psz;

            str = str + str + psz;

            strcat( psz, psz );

            strcat( psz, cstr );//合法

            strcat( psz, str );//非法,由此可見,CString可自動轉換為const char*,而string不行

            c) operator +=

            string是最強大的,幾乎可以與所有的字符串變量+=,包括CString和char*;

            CString次之,可以與基本的一些字符串變量進行+=而來,包括char*等;

            char*沒有+=運算符,只能使用strcat把兩個指針連在一起;

            d) operator[]

            CString最好,當越界時會拋出斷言異常;

            string與char*下標越界結果未定義;

            舉例:

            char* psz = “joise”;

            CString cstr = psz;

            cout << cstr[8];

            string str = psz;

            cout << str[8];

            cout << psz[8];

            e) operator== 、operator!=、operator> 、operator< 、operator>= 、perator<=

            CString與string之間不可以進行比較,但均可以與char*進行比較,并且比較的是值,而不是地址;

            cout << ( psz == cstr );

            cout << ( psz == str );

            cout << ( str == psz );

            cout << ( cstr == psz );//以上代碼返回均為1

            (四) 常用算法

            a) 查找

            作用 char* string CString
            查找指定值 strchr
            strstr
            strrstr
            strspn find Find
            第一個匹配的值 fild_first_of FindOneOf 從后面開始查找 ReserveFind 指定匹配方式 find_if

            注:find_if中是把范圍內(nèi)的值挨個代入匹配函數(shù)直至返回true

            b) 比較

            作用 char* string CString 查找指定值(區(qū)分大小寫) strcmp
            strncmp
            strcoll
            _strncoll operator<
            operator>
            operator<=
            operator>=
            operator==
            operator!= Collate

            Compare 查找指定值(不區(qū)分大小寫) _stricmp
            _strnicmp
            _stricoll
            _strnicoll CollateNoCase

            CompareNoCas

            注:返回值如果<0則前面的值小于后面的值,反之亦然

            c) 替換

            作用 char* string CString 查找指定值 _strset
            _strnset
            replace
            replace_copy
            replace_copy_if
            replace_if Replace

            d) 插入

            作用 char* string CString 查找指定值 insert Insert
            e) 增加 作用 char* string CString 動態(tài)增加值 strcat push

            append Append

            AppendChar

            AppendFormat


            f) 截取

            作用 char* string CString 得到部分值 用下標操作 substr Left

            Mid

            Right

            Truncate


            g) 移除

            作用 char* string CString 移除部份值 remove Remove 移除空白值 RemoveBlanks

            注:此為ATL提供,非C函數(shù) remove_if Trim

            TrimLeft

            TrimRig


            h) 轉換大小寫

            作用 char* string CString 轉換大小寫 _strlwr

            _strupr MakeLower

            MakeUpper


            i) 與其他類型轉換

            作用 char* string CString 轉化為數(shù)字 atoi

            atod

            atof Format 轉化為char* c_str
            GetBuffer

            GetBufferSetLen

            j) 格式化

            作用 char* string CString 格式化 sprintf Format


            k) 得到長度

            作用 char* string CString
            得到長度 strlen length GetLength 得到大小 size GetAllocLength

            l) 判斷為空

            作用 char* string CString 判斷是否為空判斷是否==NULL或者第一個字符是否是'\0' empty IsEmpty

            m) 重定義大小

            作用 char* string CString 重定義大小 realloc
            new resize GetBufferSetLength

            n) 釋放資源

            作用 char* string CString 釋放 free

            delete (delete[]) ReleaseBuffer

            ReleaseBufferSetLength

            (五) 安全性>

            CString > string > char*;

            (六) 靈活性

            CString > string >char*;

            (七) 可移植性

            char* = string > CString 

            posted @ 2010-02-24 09:46 wrh 閱讀(8061) | 評論 (0)編輯 收藏

            在VC中使用控件一直是件讓我頭痛的事件,從控件的創(chuàng)建到控件的操作管理,都得寫一大堆代碼,相比于Delphi/VB,實在是麻煩多了。其實在之前學習SDK的時候,就有想過專門花點兒時間來學習VC中控件的使用,但一直沒空。最近準備寫一個小工具,要用到ListCtrl控件,所以又不得不好好的惡補一翻。

            我是在MFC的對話框模式下使用CListCtrl控件的,其實不管在SDK或文檔/視圖模式下,VC控件的使用都差不多,下面來好好的寫寫CListCtrl控件的使用筆記。

            一、CListCtrl控件的創(chuàng)建

            由于我是在MFC的對話框模式下使用CListCtrl控件的,所以只需要在控件欄上選擇CListCtrl的圖形按鈕,接著添加到對話框中就行了。

            二、CListCtrl控件樣式的設置

            第一步:在使用CListCtrl控件之前,首先需要為該控件關聯(lián)一個變量(只針對于對話框模式):
            CListCtrl m_BlogAccountList;

            第二步:由于CListCtrl控件要做一些初始化操作,比如設置控件樣式,設置控件的行列并填入一些數(shù)據(jù)。初始化操作的代碼是在對話框的OnInitDialog事件中寫入的。

            默認情況下,CListCtrl控件的樣式是非常簡陋的,大多情況下我們都需要對CListCtrl控件的樣式進行修改,比如設置為報表樣式,可以進行整行選擇等,如有需要還有調(diào)整CListCtrl控件的行高。諸如這些設置都需要用到CListCtrl控件的擴展樣式,所以首先得了解這些擴展樣式。

            我在MSDN中沒有找到CListCtrl控件的擴展樣式資料,只好上百度百科找了找。

            CListCtrl控件的擴展樣式
            LVS_EX_GRIDLINES //繪制表格線
            LVS_EX_SUBITEMIMAGES//子項目圖標列表
            LVS_EX_CHECKBOXES //帶復選框
            LVS_EX_TRACKSELECT //自動換行
            LVS_EX_HEADERDRAGDROP//報表頭可以拖拽
            LVS_EX_FULLROWSELECT //選擇整行
            LVS_EX_ONECLICKACTIVATE//單擊激活
            LVS_EX_TWOCLICKACTIVATE//雙擊激活
            LVS_EX_FLATSB//扁平滾動條
            LVS_EX_REGIONAL
            LVS_EX_INFOTIP
            LVS_EX_UNDERLINEHOT
            LVS_EX_UNDERLINECOLD
            LVS_EX_MULTIWORKAREAS//多工作區(qū)

            對話框模式下創(chuàng)建的CListCtrl控件樣式只有一個,就是WS_BORDER,而我需要為CListCtrl設置為報表樣式,并能選擇整行,下面就可以開始寫代碼了:

            //通過GetWindowLong來獲取CListCtrl已有的樣式
            DWORD dwStyle = GetWindowLong(m_BlogAccountList.m_hWnd, GWL_STYLE);

            //在原有樣式的基本上,添加LVS_REPORT擴展樣式
            SetWindowLong(m_BlogAccountList.m_hWnd, GWL_STYLE, dwStyle|LVS_REPORT);

             

            //獲取已有的擴展樣式
            DWORD dwStyles = m_BlogAccountList.GetExStyle();

            //取消復選框樣式
            dwStyles &= ~LVS_EX_CHECKBOXES;

            //添加整行選擇和表格線擴展樣式
            m_BlogAccountList.SetExtendedStyle(dwStyles|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

            通過以上四句代碼,就已經(jīng)能滿足我的需求了。

            三、為CListCtrl控件添加列

            列的添加只需要用到LVCOLUMN結構體,所以需要先行了解了解。在MSDN中查到的LVCOLUMN結構體的定義如下:

            typedef struct _LVCOLUMN {
                UINT mask;
                int fmt;
                int cx;
                LPTSTR pszText;
                int cchTextMax;
                int iSubItem;
            #if (_WIN32_IE >= 0x0300)
                int iImage;
                int iOrder;
            #endif
            } LVCOLUMN, FAR *LPLVCOLUMN;

            該結構體共有8個成員。

            mask是用來設置LVCOLUMN結構體中哪些成員有效,其值可以為0。mask可設置的值如下:

            LVCF_FMT  fmt成員有效
            LVCF_IMAGE iImage成員有效 
            LVCF_ORDER  //以下略
            LVCF_SUBITEM
            LVCF_TEXT
            LVCF_WIDTH

            fmt成員是對CListCtrl控件列標題進行設置,比如列標題中文字的對齊方式,是否在列標題中顯示圖標等。

            cx成員是設置列寬。

            pszText成員是設置列標題文字

            cchTextMax成員是設置標題文字的緩沖區(qū)大小

            iSubItem成員是設置列索引

            iImage成員是設置ImageList中的圖像索引。

            iOrder成員的作用未知。

            下面進行添加列操作:

            char *szColUmn[] = {"帳號", "密碼"};
            int nColWidth[] = {100, 100};
            LVCOLUMN lvc;
            lvc.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVCF_ORDER;
            lvc.fmt = LVCFMT_LEFT; //左對齊
            for (int i = 0; i < 2; i++)
            {
                lvc.pszText = szColUmn[i];
                lvc.iSubItem = i;
                lvc.iOrder = i;
                lvc.cx = nColWidth[i];
                m_BlogAccountList.InsertColumn(i, &lvc);

            }

            四、為CListCtrl控件添加行
            添加行的操作需要用到InsertItem和SetItemText屬性,這個簡單,就不詳述了,看代碼:

            m_BlogAccountList.InsertItem(0, "abc");
            m_BlogAccountList.SetItemText(0, 1, "abc");
            m_BlogAccountList.SetItemText(1, 1, "123");

            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/tg2003/archive/2009/04/09/4060322.aspx

            posted @ 2010-02-23 16:45 wrh 閱讀(2364) | 評論 (0)編輯 收藏
            CString的構造函數(shù)
            CString( );
            例:CString csStr;

            CString( const CString& stringSrc );
            例:CString csStr("ABCDEF中文123456");
                CString csStr2(csStr);

            CString( TCHAR ch, int nRepeat = 1 );
            例:CString csStr('a',5);
            //csStr="aaaaa"

            CString( LPCTSTR lpch, int nLength );
            例:CString csStr("abcdef",3);
            //csStr="abc"

            CString( LPCWSTR lpsz );
            例:wchar_t s[]=L"abcdef";
                CString csStr(s);
            //csStr=L"abcdef"

            CString( const unsigned char* psz );
            例:const unsigned char s[]="abcdef";
                const unsigned char* sp=s;
                CString csStr(sp);
            //csStr="abcdef"

            CString( LPCSTR lpsz );
            例:CString csStr("abcdef");
            //csStr="abcdef"

            int GetLength( ) const;
            返回字符串的長度,不包含結尾的空字符。
            例:csStr="ABCDEF中文123456";
                printf("%d",csStr.GetLength());       //16

            void MakeReverse( );
            顛倒字符串的順序
            例:csStr="ABCDEF中文123456";
                csStr.MakeReverse();
                cout<<csStr;                  //654321文中FEDCBA

            void MakeUpper( );
            將小寫字母轉換為大寫字母
            例:csStr="abcdef中文123456";
                csStr.MakeUpper();
                cout<<csStr;                  //ABCDEF中文123456

            void MakeLower( );
            將大寫字母轉換為小寫字母
            例:csStr="ABCDEF中文123456";
                csStr.MakeLower();
                cout<<csStr;                  //abcdef中文123456

            int Compare( LPCTSTR lpsz ) const;
            區(qū)分大小寫比較兩個字符串,相等時返回0,大于時返回1,小于時返回-1
            例:csStr="abcdef中文123456";
                csStr2="ABCDEF中文123456";
                cout<<csStr.CompareNoCase(csStr2);             //0

            int CompareNoCase( LPCTSTR lpsz ) const;
            不區(qū)分大小寫比較兩個字符串,相等時返回0,大于時返回1,小于時返回-1
            例:csStr="abcdef中文123456";
                csStr2="ABCDEF中文123456";
                cout<<csStr.CompareNoCase(csStr2);             //-1

            int Delete( int nIndex, int nCount = 1 )
            刪除字符,刪除從下標nIndex開始的nCount個字符
            例:csStr="ABCDEF";
                csStr.Delete(2,3);
                cout<<csStr;              // ABF
            //當nIndex過大,超出對像所在內(nèi)存區(qū)域時,函數(shù)沒有任何操作。
            //當nIndex為負數(shù)時,從第一個字符開始刪除。
            //當nCount過大,導致刪除字符超出對像所在內(nèi)存區(qū)域時,會發(fā)生無法預料的結果。
            //當nCount為負數(shù)時,函數(shù)沒有任何操作。


            int Insert( int nIndex, TCHAR ch )
            int Insert( int nIndex, LPCTSTR pstr )

            在下標為nIndex的位置,插入字符或字符串。返回插入后對象的長度
            例:csStr="abc";
                csStr.Insert(2,'x');
                cout<<csStr;                     //abxc
                csStr="abc";
                csStr.Insert(2,"xyz");
                cout<<csStr;                     //abxyzc
            //當nIndex為負數(shù)時,插入在對象開頭
            //當nIndex超出對象末尾時,插入在對象末尾


            int Remove( TCHAR ch );
            移除對象內(nèi)的指定字符。返回移除的數(shù)目
            例:csStr="aabbaacc";
                csStr.Remove('a');
                cout<<csStr;                     //bbcc

            int Replace( TCHAR chOld, TCHAR chNew );
            int Replace( LPCTSTR lpszOld, LPCTSTR lpszNew );

            替換字串
            例:csStr="abcdef";
                csStr.Replace('a','x');
                cout<<csStr;                    //xbcdef
                csStr="abcdef";
                csStr.Replace("abc","xyz");
                cout<<csStr;                    //xyzdef

            void TrimLeft( );
            void TrimLeft( TCHAR chTarget );
            void TrimLeft( LPCTSTR lpszTargets );

            從左刪除字符,被刪的字符與chTarget或lpszTargets匹配,一直刪到第一個不匹配的字符為止
            例:csStr="aaabaacdef";
                csStr.TrimLeft('a');
                cout<<csStr;                //baacdef
                csStr="aaabaacdef";
                csStr.TrimLeft("ab");
                cout<<csStr;                //cdef
            //無參數(shù)時刪除空格

            void TrimRight( );
            void TrimRight( TCHAR chTarget );
            void TrimRight( LPCTSTR lpszTargets );

            從右刪除字符,被刪的字符與chTarget或lpszTargets匹配,一直刪到第一個不匹配的字符為止
            例:csStr="abcdeaafaaa";
                csStr.TrimRight('a');
                cout<<csStr;               //abcdeaaf
                csStr="abcdeaafaaa";
                csStr.TrimRight("fa");
                cout<<csStr;                //abcde
            //無參數(shù)時刪除空格


            void Empty( );
            清空
            例:csStr="abcdef";
                csStr.Empty();
                printf("%d",csStr.GetLength());    //0

            BOOL IsEmpty( ) const;
            測試對象是否為空,為空時返回零,不為空時返回非零
            例:csStr="abc";
                cout<<csStr.IsEmpty();         //0;
                csStr.Empty();
                cout<<csStr.IsEmpty();         //1;

            int Find( TCHAR ch ) const;
            int Find( LPCTSTR lpszSub ) const;
            int Find( TCHAR ch, int nStart ) const;
            int Find( LPCTSTR pstr, int nStart ) const;

            查找字串,nStart為開始查找的位置。未找到匹配時返回-1,否則返回字串的開始位置
            例:csStr="abcdef";
                cout<<csStr.Find('b');       //1
                cout<<csStr.Find("de");      //3
                cout<<csStr.Find('b',3);     //-1
                cout<<csStr.Find('b',0);     //1
                cout<<csStr.Find("de",4);    //-1
                cout<<csStr.Find("de",0);    //3
            //當nStart超出對象末尾時,返回-1。
            //當nStart為負數(shù)時,返回-1。


            int FindOneOf( LPCTSTR lpszCharSet ) const;
            查找lpszCharSet中任意一個字符在CString對象中的匹配位置。未找到時返回-1,否則返回字串的開始位置
            例:csStr="abcdef";
                cout<<csStr.FindOneOf("cxy");       //2

            CString SpanExcluding( LPCTSTR lpszCharSet ) const;
            返回對象中與lpszCharSet中任意匹配的第一個字符之前的子串
            例:csStr="abcdef";
                cout<<csStr.SpanExcluding("cf");    //ab

            CString SpanIncluding( LPCTSTR lpszCharSet ) const;
            從對象中查找與lpszCharSe中任意字符不匹配的字符,并返回第一個不匹配字符之前的字串
            例:csStr="abcdef";
                cout<<csStr.SpanIncluding("fdcba");    //abcd

            int ReverseFind( TCHAR ch ) const;
            從后向前查找第一個匹配,找到時返回下標。沒找到時返回-1
            例:csStr="abba";
                cout<<csStr.ReverseFind('a');        //3

            void Format( LPCTSTR lpszFormat, ... );
            void Format( UINT nFormatID, ... );

            格式化對象,與C語言的sprintf函數(shù)用法相同
            例:csStr.Format("%d",13);
                cout<<csStr;                       //13

            TCHAR GetAt( int nIndex ) const;
            返回下標為nIndex的字符,與字符串的[]用法相同
            例:csStr="abcdef";
                cout<<csStr.GetAt(2);             //c
            //當nIndex為負數(shù)或超出對象末尾時,會發(fā)生無法預料的結果。


            void SetAt( int nIndex, TCHAR ch );
            給下標為nIndex的字符重新賦值
            例:csStr="abcdef";
                csStr.SetAt(2,'x');
                cout<<csStr;                      //abxdef
            //當nIndex為負數(shù)或超出對象末尾時,會發(fā)生無法預料的結果。


            CString Left( int nCount ) const;
            從左取字串
            例:csStr="abcdef";
                cout<<csStr.Left(3);           //abc
            //當nCount等于0時,返回空。
            //當nCount為負數(shù)時,返回空。
            //當nCount大于對象長度時,返回值與對象相同。


            CString Right( int nCount ) const;
            從右取字串
            例:csStr="abcdef";
                cout<<csStr.Right(3);           //def
            //當nCount等于0時,返回空。
            //當nCount為負數(shù)時,返回空。
            //當nCount大于對象長度時,返回值與對象相同。


            CString Mid( int nFirst ) const;
            CString Mid( int nFirst, int nCount ) const;

            從中間開始取字串
            例:csStr="abcdef";
                cout<<csStr.Mid(2);           //cdef
                csStr="abcdef";
                cout<<csStr.Mid(2,3);         //cde
            //當nFirst為0和為負數(shù)時,從第一個字符開始取。
            //當nFirst等于對象末尾時,返回空字串。
            //當nFirst超出對象末尾時,會發(fā)生無法預料的結果。
            //當nCount超出對象末尾時,返回從nFirst開始一直到對象末尾的字串
            //當nCount為0和為負數(shù)時,返回空字串。


            LPTSTR GetBuffer( int nMinBufLength );
            申請新的空間,并返回指針
            例:csStr="abcde";
                LPTSTR pStr=csStr.GetBuffer(10);
                strcpy(pStr,"12345");
                csStr.ReleaseBuffer();
                pStr=NULL;
                cout<<csStr                 //12345
            //使用完GetBuffer后,必須使用ReleaseBuffer以更新對象內(nèi)部數(shù)據(jù),否則會發(fā)生無法預料的結果。


            void ReleaseBuffer( int nNewLength = -1 );
            使用GetBuffer后,必須使用ReleaseBuffer以更新對象內(nèi)部數(shù)據(jù)
            例:csStr="abc";
                LPTSTR pStr=csStr.GetBuffer(10);
                strcpy(pStr,"12345");
                cout<<csStr.GetLength();       //3(錯誤的用法)
                csStr.ReleaseBuffer();
                cout<<csStr.GetLength();       //5(正確)
                pStr=NULL;
            //CString對象的任何方法都應在ReleaseBuffer之后調(diào)用

            LPTSTR GetBufferSetLength( int nNewLength );
            申請新的空間,并返回指針
            例:csStr="abc";
                csStr.GetBufferSetLength(20);
                cout<<csStr;                  //abc
                count<<csStr.GetLength();     //20;
                csStr.ReleaseBuffer();
                count<<csStr.GetLength();     //3;
            //使用GetBufferSetLength后可以不必使用ReleaseBuffer。
            posted @ 2010-02-23 13:00 wrh 閱讀(455) | 評論 (0)編輯 收藏
            VS2005快捷鍵大全
            快捷鍵 功能
            CTRL + SHIFT + B生成解決方案
            CTRL + F7 生成編譯
            CTRL + O 打開文件
            CTRL + SHIFT + O打開項目
            CTRL + SHIFT + C顯示類視圖窗口
            F4 顯示屬性窗口
            SHIFT + F4顯示項目屬性窗口
            CTRL + SHIFT + E顯示資源視圖
            F12 轉到定義
            CTRL + F12轉到聲明
            CTRL + ALT + J對象瀏覽
            CTRL + ALT + F1幫助目錄
            CTRL + F1 動態(tài)幫助
            F1 幫助
            SHIFT + F1當前窗口幫助
            CTRL + ALT + F3幫助-搜索
            SHIFT + ALT + ENTER全屏顯示
            CTRL + -向后定位
            CTRL + SHIFT + -向前定位
            CTRL + F4關閉文檔窗口
            CTRL + PAGE DOWN光標定位到窗口上方
            CTRL + PAGE UP光標定位到窗口下方
            CTRL + F6
            CTRL + TAB下一個文檔窗口
            CTRL + SHIFT + F6
            CTRL + SHIFT + TAB上一個文檔窗口
            ALT + F6下一個面板窗口
            CTRL + K, CTRL + L取消remark
            CTRL + K, CTRL + C注釋選擇的代碼
            CTRL + K, CTRL + U取消對選擇代碼的注釋
            CTRL + M, CTRL + O折疊代碼定義
            CTRL + M, CTRL + L展開代碼定義
            CTRL + DELETE刪除至詞尾
            CTRL + BACKSPACE刪除至詞頭
            SHIFT + TAB取消制表符
            CTRL + U轉小寫
            CTRL + SHIFT + U轉大寫
            CTRL + SHIFT + END選擇至文檔末尾
            CTRL + SHIFT + HOME選擇至文檔末尾開始
            SHIFT + END選擇至行尾
            SHIFT + HOME選擇至行開始處
            SHIFT + ALT + END垂直選擇到最后尾
            SHIFT + ALT + HOME垂直選擇到最前面
            CTRL + A全選
            CTRL + W選擇當前單詞
            CTRL + SHIFT + PAGE UP選擇至本頁前面
            CTRL + SHIFT + PAGE DOWN選擇至本頁后面
            CTRL + END文檔定位到最后
            CTRL + HOME文檔定位到最前
            CTRL + G轉到…
            CTRL + K, CTRL + P上一個標簽
            CTRL + K, CTRL + N下一個標簽
            ALT + F10調(diào)試-ApplyCodeChanges
            CTRL + ALT+ Break停止調(diào)試
            CTRL + SHIFT + F9 取消所有斷點
            CTRL + F9允許中斷
            CTRL + SHIFT + F5調(diào)試-重新開始
            F5運行調(diào)試
            CTRL + F5運行不調(diào)試
            F10跨過程序執(zhí)行
            F11單步逐句執(zhí)行
            CTRL + J列出成員
            CTRL + PAGE DOWN下一個視圖
            CTRL + B格式-粗體
            CTRL + SHIFT + T格式-文字縮進
            調(diào)試快捷鍵
            F6: 生成解決方案
            Ctrl+F6: 生成當前項目
            F7: 查看代碼
            Shift+F7: 查看窗體設計器
            F5: 啟動調(diào)試
            Ctrl+F5: 開始執(zhí)行(不調(diào)試)
            Shift+F5: 停止調(diào)試
            Ctrl+Shift+F5: 重啟調(diào)試
            F9: 切換斷點
            Ctrl+F9: 啟用/停止斷點
            Ctrl+Shift+F9: 刪除全部斷點
            F10: 逐過程
            Ctrl+F10: 運行到光標處
            F11: 逐語句
            編輯快捷鍵
            Shift+Alt+Enter: 切換全屏編輯
            Ctrl+B,T / Ctrl+K,K: 切換書簽開關
            Ctrl+B,N / Ctrl+K,N: 移動到下一書簽
            Ctrl+B,P: 移動到上一書簽
            Ctrl+B,C: 清除全部標簽
            Ctrl+I: 漸進式搜索
            Ctrl+Shift+I: 反向漸進式搜索
            Ctrl+F: 查找
            Ctrl+Shift+F: 在文件中查找
            F3: 查找下一個
            Shift+F3: 查找上一個
            Ctrl+H: 替換
            Ctrl+Shift+H: 在文件中替換
            Alt+F12: 查找符號(列出所有查找結果)
            Ctrl+Shift+V: 剪貼板循環(huán)
            Ctrl+左右箭頭鍵: 一次可以移動一個單詞
            Ctrl+上下箭頭鍵: 滾動代碼屏幕,但不移動光標位置。
            Ctrl+Shift+L: 刪除當前行
            Ctrl+M,M: 隱藏或展開當前嵌套的折疊狀態(tài)
            Ctrl+M,L: 將所有過程設置為相同的隱藏或展開狀態(tài)
            Ctrl+M,P: 停止大綱顯示
            Ctrl+E,S: 查看空白
            Ctrl+E,W: 自動換行
            Ctrl+G: 轉到指定行
            Shift+Alt+箭頭鍵: 選擇矩形文本
            Alt+鼠標左按鈕: 選擇矩形文本
            Ctrl+Shift+U: 全部變?yōu)榇髮?br>Ctrl+U: 全部變?yōu)樾?br>代碼快捷鍵
            Ctrl+J / Ctrl+K,L: 列出成員
            Ctrl+Shift+空格鍵 / Ctrl+K,P: 參數(shù)信息
            Ctrl+K,I: 快速信息
            Ctrl+E,C / Ctrl+K,C: 注釋選定內(nèi)容
            Ctrl+E,U / Ctrl+K,U: 取消選定注釋內(nèi)容
            Ctrl+K,M: 生成方法存根
            Ctrl+K,X: 插入代碼段
            Ctrl+K,S: 插入外側代碼
            F12: 轉到所調(diào)用過程或變量的定義
            窗口快捷鍵
            Ctrl+W,W: 瀏覽器窗口
            Ctrl+W,S: 解決方案管理器
            Ctrl+W,C: 類視圖
            Ctrl+W,E: 錯誤列表
            Ctrl+W,O: 輸出視圖
            Ctrl+W,P: 屬性窗口
            Ctrl+W,T: 任務列表
            Ctrl+W,X: 工具箱
            Ctrl+W,B: 書簽窗口
            Ctrl+W,U: 文檔大綱
            Ctrl+D,B: 斷點窗口
            Ctrl+D,I: 即時窗口
            Ctrl+Tab: 活動窗體切換
            Ctrl+Shift+N: 新建項目
            Ctrl+Shift+O: 打開項目
            Ctrl+Shift+S: 全部保存
            Shift+Alt+C: 新建類
            Ctrl+Shift+A: 新建項

            VS2005的隱藏快捷鍵
             
            這里我將會把一些無意中發(fā)現(xiàn)的VS2005中沒有明確指出的快捷鍵共享出來,并不是所有的快捷鍵,或者常見的一些快捷鍵。
            1、Ctrl+Space直接完成類或函數(shù)(本來這個并不算隱藏的快捷鍵,但是因為中文輸入法搶占這個快捷鍵,所以。。。,替代的快捷鍵是Alt+Right)
            2、Shift+Delete整行刪除,并且將這一行放到剪貼板(這時候不能選中一段內(nèi)容)
            3、Shift+Insert粘貼,有點匪夷所思,Ctrl+V就可以了,大概是為了和Shift+Delete對應吧
            4、Ctrl+Up,Ctrl+Down滾動編輯器,但盡量不移動光標,光標保證在可見范圍內(nèi)
            5、Ctrl+BackSpace,Ctrl+Delete整詞刪除,有的時候很有用
            6、Ctrl+Left,Ctrl+Right按整詞移動光標(不算隱藏,和前面幾條加起來就是Ctrl光標控制套件了)
            7、Alt+Shift+F10打開執(zhí)行改名,實現(xiàn)接口和抽象類的小窗口(還可以用Ctrl+.,不過有的中文輸入法用到這個)
            8、Shift+F9調(diào)試是打開QuickWatch,內(nèi)容是當前光標所在處的內(nèi)容
            9、F12轉跳到定義,很有用的快捷鍵
            10、Shift+F12查找所有引用
            11、Ctrl+F10=F5,開始Debug
            12、Ctrl+F6循環(huán)察看代碼窗口,有點Ctrl+Tab的感覺
            13、Ctrl+F3查找當前光標選中的內(nèi)容,可以和F3配合使用
            14、Ctrl+F2將焦點轉移到類的下拉框上
            15、Alt+F7=Ctrl+Tab
            16、Alt+F11新開VS2005并編輯宏
            17、Alt+F12查找=Ctrl+F
            posted @ 2010-02-23 08:45 wrh 閱讀(269) | 評論 (0)編輯 收藏
            僅列出標題
            共25頁: First 9 10 11 12 13 14 15 16 17 Last 

            導航

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            統(tǒng)計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久午夜无码鲁丝片秋霞| 免费观看成人久久网免费观看| 欧美熟妇另类久久久久久不卡| 亚洲国产精品综合久久网络| 国产高潮国产高潮久久久91| 国产韩国精品一区二区三区久久| 久久综合给合久久狠狠狠97色| 久久99久久99精品免视看动漫| 欧美精品乱码99久久蜜桃| 久久精品极品盛宴观看| 99蜜桃臀久久久欧美精品网站 | 色综合久久久久综合99| 久久久不卡国产精品一区二区 | 97久久久精品综合88久久| 久久人人爽人人爽人人AV | 欧美精品乱码99久久蜜桃| 狠狠色噜噜色狠狠狠综合久久| 日产精品99久久久久久| 国产日产久久高清欧美一区| 久久精品国产72国产精福利| 亚洲欧美久久久久9999| 亚洲成色www久久网站夜月| 久久国产免费观看精品| 久久中文字幕一区二区| 久久婷婷五月综合97色直播| 国产精品久久新婚兰兰| 国产精品青草久久久久婷婷 | 久久99国产精品久久久| 国产999精品久久久久久| 久久无码中文字幕东京热 | 久久久久综合网久久| 一本久久免费视频| 久久人人爽人人爽人人片AV不 | 欧美久久一区二区三区| 久久九九久精品国产免费直播| 精品一区二区久久| 亚洲欧洲久久av| 国产精品美女久久久网AV| 久久AV高潮AV无码AV| 久久精品成人欧美大片| 国产精品天天影视久久综合网|