• <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>

            幽魂國度

             

            自定義消息函數

            (一)、在頭文件中定義消息的值
            :#define WM_自定義名字 WM_USER+1.

            (二)、在該頭文件中編寫該消息響應函數原型的聲明:
            例:
             //}}AFX_MSG
             afx_msg void On自定義函數名(自定義形參);
             DECLARE_MESSAGE_MAP() 
            注:定義消息函數可以不帶參數。

            (三)、在該類源文件中添加消息映射
            BEGIN_MESSAGE_MAP(CChatDlg, CDialog)
             //{{AFX_MSG_MAP(CChatDlg)
             ON_WM_SYSCOMMAND()
             ON_WM_PAINT()
             ON_WM_QUERYDRAGICON()
             ON_BN_CLICKED(IDC_BTN_SEND, OnBtnSend)
             //}}AFX_MSG_MAP
              ON_MESSAGE(WM_名字,On函數名)
            END_MESSAGE_MAP()

            (四)、該消息響應函數
            void C類名::On函數名(形參)
            {
            }

            posted @ 2009-11-17 22:23 峰 閱讀(191) | 評論 (0)編輯 收藏

            如何在按鍵下輸出文字

            介紹函數:CButtonST類應用
            void CButtonST::SetTooltipText(CString* spText, BOOL bActivate)   //文字輸出
            {
             if (spText == NULL) return;

             // Initialize ToolTip
             InitToolTip();

             // If there is no tooltip defined then add it
             if (m_ToolTip.GetToolCount() == 0)    // CToolTipCtrl m_ToolTip全局變量
             {
              CRect rectBtn;
              GetClientRect(rectBtn);
              m_ToolTip.AddTool(this, (LPCTSTR)*spText, rectBtn, 1);
             }

             // Set text for tooltip
             m_ToolTip.UpdateTipText((LPCTSTR)*spText, this, 1);  
              m_ToolTip.Activate(bActivate);
            } // End of SetTooltipText

            void CButtonST::InitToolTip() 
            {
             if (m_ToolTip.m_hWnd == NULL)
             {
              // Create ToolTip control
              m_ToolTip.Create(this);
              // Create inactive
              m_ToolTip.Activate(FALSE);
             }
            } // End of InitToolTip

            程序:
            頭文件
            CButtonST m_btn; 定義一CButtonST 對象
            CString strName;
            源文件:
            strName="輸入文字";
             m_btn.SetTooltipText(&strName);
            可以在OnInitDialog()函數中定義,也可以在其他函數中重新定義。
             DDX_Control(pDX,IDC_BUTTON1,m_btn);  //輸出,DoDataExchange(CDataExchange* pDX)函數中

            posted @ 2009-11-16 21:33 峰 閱讀(237) | 評論 (0)編輯 收藏

            如何在控件上設置圖像,點擊時更改

            介紹函數:
            void AFXAPI DDX_Control( CDataExchange* pDX, int nIDC, CWnd& rControl );
            參數一:指向CDataExchange的指針,用于建立資料交換設備上下文;
            參數二:控件IDC;
            參數三:控件變量。
            重寫SetIcon()函數:
             頭文件:
             
            void SetIcon(int nIconInId, int nIconOutId = NULL);  //帶參數的成員函數
             源文件:

            void CButtonST::SetIcon(int nIconInId, int nIconOutId)

            {

                   HICON hIconIn;         //定義HICON 變量,用于保存圖片

                   HICON hIconOut;

                   HINSTANCE hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nIconInId), RT_GROUP_ICON);
                   //鼠標點擊時獲得應用資源句柄
                   hIconIn = (HICON)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nIconInId), IMAGE_ICON, 0, 0, 0);
                   // 鼠標移開時加載圖片
                  
             hIconOut = (nIconOutId == NULL) ? NULL : (HICON)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/,    MAKEINTRESOURCE(nIconOutId), IMAGE_ICON, 0, 0, 0);
                   SetIcon(hIconIn, hIconOut);  //調用
            }

            void CButtonST::SetIcon(HICON hIconIn, HICON hIconOut)
            {
                  
            // Note: the following two lines MUST be here! even if
               
               // BoundChecker says they are unnecessary!
                   if (m_hIconIn != NULL) ::DestroyIcon(m_hIconIn);        //判定是否與圖片相關聯
                   if (m_hIconOut != NULL) ::DestroyIcon(m_hIconOut);

                 
              // Set icon when the mouse is IN the button
                 
             m_hIconIn = hIconIn;

                  
             // Set icon when the mouse is OUT the button
                 
             m_hIconOut = (hIconOut == NULL) ? m_hIconIn : hIconOut;

                   ICONINFO ii;             //ICONINFO 結構體
                 
             // Get icon dimension
                 
             ZeroMemory(&ii, sizeof(ICONINFO));        //ii內存設0
                  
             ::GetIconInfo(m_hIconIn, &ii);                       //設置自定義圖標
                  
             m_cxIcon = (BYTE)(ii.xHotspot * 2);
                 
             m_cyIcon = (BYTE)(ii.yHotspot * 2);
                 
             ::DeleteObject(ii.hbmMask);
                 
             ::DeleteObject(ii.hbmColor);

                  
             RedrawWindow();

            } // End of SetIcon

            程序流程:
            a)添加頭文件
                 CButton m_btn;定義一對象
            b)在新建框架類中初始化
             BOOL CMy5Dlg::OnInitDialog()
            {
                  m_btn.SetIcon(IDI_ICON1,IDI_ICON2); //設置兩幅圖標
            }
            c)鼠標點擊交換圖片
             void CMy5Dlg::DoDataExchange(CDataExchange* pDX)
            {
                       DDX_Control(pDX,IDC_BUTTON1,m_btn);
            }

            posted @ 2009-11-14 14:40 峰 閱讀(352) | 評論 (0)編輯 收藏

            C++頭文件

            #include <assert.h>    //設定插入點

             

              #include <ctype.h>//字符處理

             

              #include <errno.h>//定義錯誤碼

             

              #include <float.h>//浮點數處理

             

              #include <fstream.h>//文件輸入/輸出

             

              #include <iomanip.h>//參數化輸入/輸出

             

              #include <iostream.h>   //數據流輸入/輸出

             

              #include <limits.h>    //定義各種數據類型最值常量

             

              #include <locale.h>    //定義本地化函數

             

              #include <math.h>     //定義數學函數

             

              #include <stdio.h>     //定義輸入/輸出函數

             

              #include <stdlib.h>    //定義雜項函數及內存分配函數

             

              #include <string.h>    //字符串處理

             

              #include <strstrea.h>   //基于數組的輸入/輸出

             

              #include <time.h>     //定義關于時間的函數

             

              #include <wchar.h>     //寬字符處理及輸入/輸出

             

              #include <wctype.h>    //寬字符分類

             

            標準 C++ (同上的不再注釋)

             

              #include <algorithm>    //STL 通用算法

             

              #include <bitset>     //STL 位集容器

             

              #include <cctype>

             

              #include <cerrno>

             

              #include <clocale>

             

              #include <cmath>

             

              #include <complex>     //復數類

             

              #include <cstdio>

             

              #include <cstdlib>

             

              #include <cstring>

             

              #include <ctime>

             

              #include <deque>      //STL 雙端隊列容器

             

              #include <exception>    //異常處理類

             

              #include <fstream>

            posted @ 2009-11-11 20:54 峰 閱讀(284) | 評論 (0)編輯 收藏

            構造函數簡介

            目的:為了使用戶定義的數據類型如同一般數據類型一樣使用。
            功能:對對象進行初始化,有若干種方法。
            特點:1、無返回值說明;2、不能繼承;3、可以有缺省參數;4、不能取地址,構造時自動給對象分配棧中內存,析構時回收;
                        5、自動調用構造函數。
                    構造函數是類的一個特殊成員函數,其函數名同類名一樣。C++通過構造函數可以正確地初始化對象。構造函數不能被顯式調用,不能使
            虛函數。
            例: class queue {
                                     int q[100];              //默認為private
                                     int sloc,rloc;
                                  public:
                                     queue();
                                     void qput(int i); 
            };
            queue ::queue ()          //隱式調用
            {
                    sloc=rloc=0;
            }        
            int    queue ::qput (int i){}
            main()
            {
                  queue  a,b;
                  a.qput (10); 
                  b.qput (20); 
            }
                  參數化的構造函數
            queue ::queue (int vx,int vy){} };
            main()
            {
                queue  a(10,20);
            }
                  缺省參數的構造函數:特殊情況下需要傳遞參數,一般都是用缺省參數。
            單個參數:queue ::queue (int i=16) {}   };
                                main()
                                  {
                                         queue  a;
                                   }
            多個參數:queue ::queue (int vx=0,int vy=0) {}
            缺省參數還可用于一般成員函數。使用時應注意避免二義性。
                  多構造函數
            public:
                    queue ( );
                    queue (int );
                    queue (int,char );
            };
            main()
            {
                     queue a;
                     queue b(1);
                     queue c(1,'c');    //避免二義性
            }
                   拷貝構造函數
            1、系統產生:
            queue ::queue (int vx,int vy){}   };
              main() { queue a(b) ; }
            2、自定義:
            queue ::queue (const queue &p){}  };
             main()  { queue }

            總結:構造函數的作用是對對象本身做初始化工作,也就是給用戶提供初始化類中成員變量的一種方式。
                      如果一個類中沒有定義任何的構造函數,那C++編輯器將在某些情況下提供一個默認的構造函數(不帶參數),3種情況:
                1)、類有虛擬成員函數或虛擬繼承父類(虛擬基類);
                2)、類的基類有構造函數;
                3)、類中的所有非靜態餓對象數據成員,它們所屬的類中有構造函數。

            構造函數的目的是為了初始化對象,因此一個構造函數至少應該使得對象處于明確定義的狀態
            例://class string
            string () {s=new char[80];len=80;}
            string (int n) {s=new char[n];len=n;}
            }
            string::stringprintf() { cout<< s <<endl;}
            定義對象:
            string x,y(80);
            x.print();
            y.print();
            此時,x和y調用的print()函數結構未定義,因為在構造函數中只對字符數組分配了內存,卻未對分配的內存進行初始化。
            我們可以通過修改帶默認參數值的構造函數來改進:
            string (int n=80) {s=new char[n];s[0]='\0';len=n;}
             用默認參數的形式來代替函數重載的形式。

            注意點:
            1)構造函數應該使對象處于明確定義的狀態;
            2)保持物理狀態的一致性:對數據成員的定義保持一致,在所有函數中只能使用一種定義。
            3)類不變性:可以將不變性作為程序代碼的注釋,//len=strlen(s);
            4)動態內存的一致性:接口一致性
                 void assign (char* str) { strcpy(s,str);}
                 void concat (string& a) {s=new char[len+1];strcpy(s,a.s);}
                 兩函數的表現行為存在不一致性:前者內存不再分配,而后者一直在分配。我們應只使用一種以保持一致性。
            5)內存泄露:concat函數中每拷貝一次,s就重新分配一次,s被新的指針值覆蓋,而前一指針值被拋棄,產生內存垃圾。
                  因此concat函數必須保證舊的數組一定要被刪除,對于每一個new,就必須有一個delete操作,且delete語句只能被增加在
                  新的字符串創建之后。
                  void concat (string& a) {new_s=new char[len+1];strcpy(s,a.s); delete[]s;s=new_s;}

            posted @ 2009-11-10 15:49 峰 閱讀(437) | 評論 (0)編輯 收藏

            常量指針與指針常量

            const char*類型是指向常量的指針,不能修改其指向的內容,當可以修改其指向的地址。
            例1:
            char ch[5]="lisi";                //定義一字符串ch[],并賦值
            const char* pStr=ch;         //定義一常量指針pStr,將ch賦給pStr
            注:ch[]定義時須對其進行賦值,字符長度為5,最后一位為"\0"表示結束。
                    在對pStr賦值時相當于將ch[]的首地址給pStr,因為const char*類型得指針變量只可以修改其本身的值,即變量保存的內存地址。
                    因此該變量的值可以改變,但其指向的地址的內容不能改變。
                如:*pStr="jiliang";  //錯誤的,因為其直接改變了內容,所以無法將"jiliang"賦值給ch[];
                          pStr="jiliang";     //正確的,因為其改變的是地址值,即pStr保存的是="jiliang"的首地址。
                    我們無法通過pStr來修改其指向地址的內容,但可以通過ch[]來修改內容。
            使用:利用指針類型來傳遞參數時,可以定義為const char*類型,保持內容的一致性。

            char* const類型是一個指針常量,可以修改地址指向的內容,但不可以修改其地址值。
            例2:
            char ch[5]="lisi";                //定義一字符串ch[],并賦值
            const char* pStr=ch;         //定義一指針常量pStr,將ch賦給pStr
            注:對于指針常量,必須在定義時對其賦值。指針常量表示指針本身是常量,即地址值為常量。
                   如:pStr="jiliang";     //錯誤的,因為該賦值將新的字符串地址賦值給指針常量,這是不允許的;
                           *pStr="jiliang";//正確的,可以對指針常量指向的地址修改其內容。
             小結:
              const char*類型的指針其指向的內容是常量,不能修改,但其地址值可以修改;
              char* const類型的指針其地址值是常量,不能修改,但其指向的內容可以修改。
            參考:<<VC++深入淺出>>孫鑫

            posted @ 2009-11-09 12:28 峰 閱讀(233) | 評論 (0)編輯 收藏

            僅列出標題
            共2頁: 1 2 

            導航

            統計

            常用鏈接

            留言簿

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            精品熟女少妇av免费久久| 国产精品久久久久久影院| 久久天堂电影网| 久久久久亚洲av无码专区 | 伊人久久大香线蕉AV色婷婷色| 精品久久人人妻人人做精品| www.久久精品| 国产成人精品白浆久久69 | 一本色道久久综合亚洲精品| 亚洲精品tv久久久久| 久久久久女教师免费一区| 国产精品女同一区二区久久| 国产高清美女一级a毛片久久w| 伊人久久综在合线亚洲2019| 97超级碰碰碰碰久久久久| 国产精品久久国产精麻豆99网站| 国内精品伊人久久久久AV影院| 久久精品国产亚洲77777| 国产日产久久高清欧美一区| 久久99精品综合国产首页| 94久久国产乱子伦精品免费| 久久久WWW成人免费毛片| 久久婷婷是五月综合色狠狠| 久久久国产99久久国产一| 久久久久亚洲AV无码专区首JN| 午夜精品久久久久久毛片| 精品久久久久久久无码 | 久久电影网一区| 国产精品欧美久久久久天天影视| 久久国产成人午夜aⅴ影院| 青青草原综合久久大伊人导航| 免费无码国产欧美久久18| 色综合久久无码五十路人妻| 国产精品久久影院| 久久久这里有精品中文字幕| 久久久久免费精品国产| 国内精品久久久久影院一蜜桃 | 欧美久久综合性欧美| 久久久久久噜噜精品免费直播| 99久久做夜夜爱天天做精品| 久久久久亚洲Av无码专|