• <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>
            posts - 131, comments - 12, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

                 摘要: 1、連接Mysql2、修改密碼93、增加新用戶4.1 創(chuàng)建數(shù)據(jù)庫4.2 顯示數(shù)據(jù)庫4.3 刪除數(shù)據(jù)庫4.4 連接數(shù)據(jù)庫4.5 當(dāng)前選擇的數(shù)據(jù)庫5.1 創(chuàng)建數(shù)據(jù)表5.2 獲取表結(jié)構(gòu)5.3 刪除數(shù)據(jù)表5.4 表插入數(shù)據(jù)5.5 查詢表中的數(shù)據(jù)5.6 刪除表中數(shù)據(jù)5.7 修改表中數(shù)據(jù)5.8 增加字段5.9 修改表名6、備份數(shù)據(jù)庫7.2 一個(gè)建庫和建表的實(shí)例27.1 一個(gè)建庫和建表的實(shí)例11、連接Mysql...  閱讀全文

            posted @ 2012-10-29 14:55 盛勝 閱讀(343) | 評論 (0)編輯 收藏

            數(shù)據(jù)庫操作,接口

            posted @ 2012-10-29 09:13 盛勝 閱讀(235) | 評論 (0)編輯 收藏

            MFC的圖片按鈕  

            利用CBitmapButton類實(shí)現(xiàn)位圖按鈕的兩種方法 利用CBitmapButton類實(shí)現(xiàn)位圖按鈕的兩種方法:
            方法一:
            1、在資源編輯的時(shí)候選中按鈕的 Owner draw 屬性,不需要選擇 Bitmap 屬性.
            按鈕右鍵-->Styles-->Owner draw

            2、在程序中定義一個(gè)CBitmapButton成員變量。
            注意:不能使用ClassWizard為按鈕映射一個(gè)CButton變量,然后改為CBitmapButton,
            這么做并不能將按鈕直接映射為CBitmapButton類的對象,反而會出現(xiàn)初始化錯(cuò)誤

            3、使用CBitmapButton::LoadBitmaps裝載各種狀態(tài)的圖片,
            使用CBitmapButton::SubclassDlgItem關(guān)聯(lián)到想要的按鈕,
            使用CBitmapButton::SizeToContent函數(shù)使按鈕適合圖片大小。
            注意Loadbitmaps一定要在關(guān)聯(lián)到按鈕之前進(jìn)行!

            附:添加資源Bitmap的方法:Insert菜單-->Resource -->Resource type:Bitmap-->Import, 
            之后選擇所需的圖片就可以了

            方法一的例子:
            首先,選中按鈕的owner Draw屬性,在資源中加載兩副*.bmp格式的位圖,
            然后在對話框類中加入:
            1CBitmapButton m_btnX1;
            2//定義變量,必須放在函數(shù)外面才能正常實(shí)現(xiàn)
            3
            4BOOL CXXXXXXX::OnInitDialog()
            5{
            6CDialog::OnInitDialog();
            7
            8m_btnX1.LoadBitmaps(IDB_XXXX_UP,IDB_XXXX_DOWN);
            9//這里是兩副位圖,鼠標(biāo)按下和彈起,
            10// 也可以只加一個(gè)ID資源;
            11m_btnX1.SubclassDlgItem(IDC_DASEN_X1,this);
            12m_btnX1.SizeToContent();
            13}
            14
            15文章引用自:http://blog.sina.com.cn/s/blog_44e571d70100080o.html
            16
            方法二:使用CBitmapButton::AutoLoad函數(shù)關(guān)聯(lián)到想要的按鈕
            需要注意:
            A、使用CBitmapButton::AutoLoad函數(shù)之前不能使用CBitmapButton::LoadBitmaps裝載
            各種狀態(tài)的圖片,否則會出錯(cuò)。
            B、AutoLoad函數(shù)完成關(guān)聯(lián)和改變按鈕大小的功能。類似于上面CBitmapButton::SubclassDlgItem
            和CBitmapButton::SizeToContent函數(shù)的功能。
            C、CBitmapButton::AutoLoad使用的位圖是默認(rèn)資源ID的,即它會自動裝載相關(guān)資源位圖。
            位圖的資源ID格式為:
            "按鈕Caption+U"、"按鈕Caption+D"、"按鈕Caption+F"、"按鈕Caption+X",
            分別代表Up、Down、Focus、Disable狀態(tài)。
            如資源編輯時(shí),希望關(guān)聯(lián)的按鈕的Caption為Test,
            那么其默認(rèn)裝載的位圖資源的ID為:"TestU"/"TestD"/"TestF"/"TestX",
            注意分號""也是其ID的一部分。
            方法二例子:
            首先,選中Caption為:"myBitmapButton"按鈕的owner Draw屬性
            其次,添加兩個(gè)位圖資源,并修改其ID分別為:"myBitmapButtonU"和"myBitmapButtonD",這里只添加兩個(gè)位圖
            然后在對話框類中加入:
            1 CBitmapButton m_btnX1;//必須放在函數(shù)外面才能正常實(shí)現(xiàn)
            2 BOOL CXXXXXXX::OnInitDialog()
            3 {
            4 CDialog::OnInitDialog();

            6 m_btnX1.AutoLoad(IDC_BUTTON1,this);//ID為IDC_BUTTON1的按鈕的Caption為:myBitmapButton
            7 }
            至此兩種方法就都結(jié)束了。

            posted @ 2012-10-26 15:19 盛勝 閱讀(1147) | 評論 (0)編輯 收藏

            新建一個(gè)MFC項(xiàng)目
            在類視圖中添加OnEraseBkgnd的消息響應(yīng)函數(shù),函數(shù)的編寫如下:
            BOOL CbackgDlg::OnEraseBkgnd(CDC* pDC)
            {
            // TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值
            CDialog::OnEraseBkgnd(pDC);   
            if(!m_Bitmap.m_hObject)
            return true;
            CRect rect;
            GetClientRect(&rect);
                    //設(shè)備上下文對象的類
            CDC dc;
            //該函數(shù)創(chuàng)建一個(gè)與指定設(shè)備兼容的內(nèi)存設(shè)備上下文環(huán)境(DC)
            dc.CreateCompatibleDC(pDC);
                    //該函數(shù)選擇一對象到指定的設(shè)備上下文環(huán)境中,該新對象替換先前的相同類型的對象
            CBitmap* pOldBitmap = dc.SelectObject(&m_Bitmap);
            int bmw, bmh ;
            BITMAP bmap;
            m_Bitmap.GetBitmap(&bmap);
            bmw = bmap.bmWidth;
            bmh = bmap.bmHeight;
            int xo=0, yo=0;
            ////////此處貼圖采用拉伸strentch//////////
            pDC->StretchBlt(xo, yo, rect.Width(),rect.Height(), &dc,
            0, 0,bmw,bmh, SRCCOPY);
            /////////////////////////////////////////
            dc.SelectObject(pOldBitmap);
            return true;
            //return CDialog::OnEraseBkgnd(pDC);
            }
            m_bitmap在頭文件中聲明 
            private:
            CBitmap m_Bitmap;
            并在窗口初始化函數(shù)OnInitDialog()中添加一句:
            m_Bitmap.LoadBitmap(IDB_BITMAP1);

            圖片為bmp格式可行,圖片為png格式不可行。其他圖片類型未測試。

            BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);
            hdcDest:指向目標(biāo)設(shè)備環(huán)境的句柄。
              nXOriginDest:指定目標(biāo)矩形左上角的X軸坐標(biāo),按邏輯單位表示坐標(biāo)。
              nYOriginDest:指定目標(biāo)矩形左上角的Y軸坐標(biāo),按邏輯單位表示坐標(biāo)。
              nWidthDest:指定目標(biāo)矩形的寬度,按邏輯單位表示寬度。
              nHeightDest:指定目標(biāo)矩形的高度,按邏輯單位表示高度。
              hdcSrc:指向源設(shè)備環(huán)境的句柄。
              nXOriginSrc:指向源矩形區(qū)域左上角的X軸坐標(biāo),按邏輯單位表示坐標(biāo)。
              nYOriginSrc:指向源矩形區(qū)域左上角的Y軸坐標(biāo),按邏輯單位表示坐標(biāo)。
              nWidthSrc:指定源矩形的寬度,按邏輯單位表示寬度。
              nHeightSrc:指定源矩形的高度,按邏輯單位表示高度。
              dwRop:指定要進(jìn)行的光柵操作。光柵操作碼定義了系統(tǒng)如何在輸出操作中組合顏色,這些操作包括刷子、源位圖和目標(biāo)位圖等對象。參考BitBlt可了解常用的光柵操作碼列表。
              下面列出了一些常見的光柵操作代碼: BLACKNESS:表示使用與物理調(diào)色板的索引0相關(guān)的色彩來填充目標(biāo)矩形區(qū)域,(對缺省的物理調(diào)色板而言,該顏色為黑色)?!STINVERT:表示使目標(biāo)矩形區(qū)域顏色取反?!ERGECOPY:表示使用布爾型的AND(與)操作符將源矩形區(qū)域的顏色與特定模式組合一起?!ERGEPAINT:通過使用布爾型的OR(或)操作符將反向的源矩形區(qū)域的顏色與目標(biāo)矩形區(qū)域的顏色合并?!OTSRCCOPY:將源矩形區(qū)域顏色取反,再拷貝到目標(biāo)矩形區(qū)域。 NOTSRCERASE:使用布爾類型的OR(或)操作符組合源和目標(biāo)矩形區(qū)域的顏色值,然后將合成的顏色取反?!ATCOPY:將特定的模式拷貝到目標(biāo)位圖上?!ATPAINT:通過使用布爾OR(或)操作符將源矩形區(qū)域取反后的顏色值與特定模式的顏色合并。然后使用OR(或)操作符將該操作的結(jié)果與目標(biāo)矩形區(qū)域內(nèi)的顏色合并。 PATINVERT:通過使用XOR(異或)操作符將源和目標(biāo)矩形區(qū)域內(nèi)的顏色合并。 SRCAND:通過使用AND(與)操作符來將源和目標(biāo)矩形區(qū)域內(nèi)的顏色合并。 SRCCOPY:將源矩形區(qū)域直接拷貝到目標(biāo)矩形區(qū)域?!RCERASE:通過使用AND(與)操作符將目標(biāo)矩形區(qū)域顏色取反后與源矩形區(qū)域的顏色值合并?!RCINVERT:通過使用布爾型的XOR(異或)操作符將源和目標(biāo)矩形區(qū)域的顏色合并?!RCPAINT:通過使用布爾型的OR(或)操作符將源和目標(biāo)矩形區(qū)域的顏色合并?!HITENESS:使用與物理調(diào)色板中索引1有關(guān)的顏色填充目標(biāo)矩形區(qū)域。(對于缺省物理調(diào)色板來說,這個(gè)顏色就是白色)

            posted @ 2012-10-25 17:38 盛勝 閱讀(652) | 評論 (0)編輯 收藏

            一、禁止對話框的移動
            (1)、第一種方法
            為這個(gè)對話框添加系統(tǒng)消息過慮處理:
            .h中:
            ...
            afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
            ...

            .cpp中
            BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
            ...
            ON_WM_SYSCOMMAND()
            ...
            END_MESSAGE_MAP()


            void CXXXDlg::OnSysCommand(UINT nID, LPARAM lParam)
            {
            if (nID == SC_MOVE || nID==0xF012)
            return;
            else
            CDialog::OnSysCommand(nID, lParam);
            }

            SC_MOVE就是0xF010。
            參考帖子:http://topic.csdn.net/t/20020821/12/957952.html
            (2)、第二種方法
            .h中:
            ...
            afx_msg UINT OnNcHitTest(CPoint point); 
            ...

            .cpp中
            BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
            ...
            ON_WM_NCHITTEST() 
            ...
            END_MESSAGE_MAP()


            UINT CXXXDlg::OnNcHitTest(CPoint point)
            {
                int ret =CDialog::OnNcHitTest(point);

                if(HTCAPTION == ret)
                   returnHTCLIENT;

                returnret;
            }

            二、禁止對話框改變大小
            .h中:
            ...
            afx_msg UINT OnNcHitTest(CPoint point); 
            ...

            .cpp中
            BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
            ...
            ON_WM_NCHITTEST() 
            ...
            END_MESSAGE_MAP()


            UINT CXXXDlg::OnNcHitTest(CPoint point)
            {
                int ret =CDialog::OnNcHitTest(point);

               //if語句的前兩行是用來禁止改變大小的,最后一行是用來禁止移動的
                if(HTTOP ==ret || HTBOTTOM == ret || HTLEFT == ret || HTRIGHT == ret
                  || HTBOTTOMLEFT == ret ||HTBOTTOMRIGHT == ret || HTTOPLEFT == ret || HTTOPRIGHT == ret       || HTCAPTION== ret)
                   returnHTCLIENT;

                returnret;
            }
            參考帖子:http://web.newsfan.net/showpost.php?p=594616

            posted @ 2012-10-24 17:13 盛勝 閱讀(1453) | 評論 (0)編輯 收藏

            方法一:

            在Dialog::OnInitDialog()中加入:

            ModifyStyle(WS_CAPTION,0,0);  // 如果只是要普通的全屏,不想去掉標(biāo)題欄,就不用第一個(gè)語句
            SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0);

             

            不過這種方法不方便調(diào)整控件的位置,此時(shí)可以考慮方法二

             

            方法二:
            先取得分辨率,

            int cx,cy; 
            cx = GetSystemMetrics(SM_CXSCREEN);
            cy = GetSystemMetrics(SM_CYSCREEN);



            再用MoveWindow

            CRect rcTemp; 
            rcTemp.BottomRight() = CPoint(cx, cy);
            rcTemp.TopLeft() = CPoint(0, 0);
            MoveWindow(&rcTemp);


            方法二因?yàn)楂@得了窗口與屏幕的參數(shù),所以當(dāng)想調(diào)整Dialog上的一些控件位置時(shí)就方便許多。

             

            ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

            不過呢,只能在OnSize里面自己調(diào)整控件的大小的位置,需要自己一個(gè)一個(gè)地調(diào)整所有需要調(diào)整的控件的大小和位置。

            方法請看:

              三步解決MFC窗口變動后控件的大小

            一 、在頭文件中定義 POINT Old;//存放對話框的寬和高。
            二 、添加 WM_SIZE消息:
            三 、添加reseze函數(shù)


            http://blog.csdn.net/Small_hunter/article/details/5640101
            中有詳細(xì)代碼

            posted @ 2012-10-24 16:48 盛勝 閱讀(462) | 評論 (0)編輯 收藏

            1. 在資源文件中添加Menu
            void ClistbDlg::OnRButtonDown(UINT nFlags, CPoint point)
            {
            // TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值
            CMenu menu;
            menu.LoadMenu(IDR_MENU1);
            CMenu* pPopup=menu.GetSubMenu(0);

                      //ClientToScreen( )是把窗口坐標(biāo)轉(zhuǎn)換為屏幕坐標(biāo)
                      //ScreenToClient( )是把屏幕坐標(biāo)轉(zhuǎn)換為窗口坐標(biāo)
                      //屏幕坐標(biāo)是相對于屏幕左上角的,而窗口坐標(biāo)是相對于窗口用戶區(qū)左上角的
            ClientToScreen(&point);

                    //該函數(shù)在指定位置顯示快捷菜單,并跟蹤菜單項(xiàng)的選擇
                      //TPM_LEFTBUTTON:若設(shè)置此標(biāo)志,用戶只能用鼠標(biāo)左鍵選擇菜單項(xiàng)。  
                      //TPM_RIGHTBUTTON:若設(shè)置此標(biāo)志,用戶能用鼠標(biāo)左、右鍵選擇菜單項(xiàng)。
                      //X:在屏幕坐標(biāo)下,快捷菜單的水平位置。  
                      //Y:在屏幕坐標(biāo)下,快捷菜單的垂直位置。
            pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
            CDialog::OnRButtonDown(nFlags, point);
            }


             CMenu類的成員
              數(shù)據(jù)成員
              
            m_hMenu 
            指定附加給CMenu對象的窗口菜單的句柄
              構(gòu)造函數(shù)
              
            CMenu 
            構(gòu)造一個(gè)CMenu對象
              初始化
              
            Attach 
            附加一個(gè)Windows菜單句柄給CMenu對象 
            Detach 
            從CMenu對象中分離Windows菜單的句柄,并返回該句柄 
            FromHandle 
            返回一個(gè)指向給定Windows菜單句柄的CMenu對象的指針 
            GetSafeHmenu 
            返回由CMenu對象包含的m_hMenu值 
            DeleteTempMap 
            刪除由FromHandle成員函數(shù)創(chuàng)建的所有臨時(shí)CMenu對象 
            CreateMenu 
            創(chuàng)建一個(gè)空菜單,并將其附加給CMenu對象 
            CreatePopupMenu 
            創(chuàng)建一個(gè)空的彈出菜單,并將其附加給CMenu對象 
            LoadMenu 
            從可執(zhí)行文件中裝載菜單資源,并將其附加給CMenu對象LoadMenuIndirect從內(nèi)存的菜單模板中裝載菜單,并將其附加給CMenu對象 
            DestroyMenu 
            銷毀附加給CMenu對象的菜單,并釋放菜單占用的內(nèi)存
              菜單操作
              
            DeleteMenu 
            從菜單中刪除指定的項(xiàng)。如果菜單項(xiàng)與彈出菜單相關(guān)聯(lián),那么將銷毀彈出菜單的句柄,并釋放它占用的內(nèi)存 
            TrackPopupMenu 
            在指定的位置顯示浮動菜單,并跟蹤彈出菜單的選擇項(xiàng)
              菜單項(xiàng)操作
              
            AppendMenu 
            在該菜單末尾添加新的菜單項(xiàng) 
            CheckMenuItem 
            在彈出菜單的菜單項(xiàng)中放置或刪除檢測標(biāo)記 
            CheckMenuRadioItem 
            將單選鈕放置在菜單項(xiàng)之前,或從組中所有的其它菜單項(xiàng)中刪除單選鈕 
            SetDefaultItem 
            為指定的菜單設(shè)置缺省的菜單項(xiàng)GetDefaultItem獲取指定的菜單缺省的菜單項(xiàng) 
            EnableMenuItem 
            使菜單項(xiàng)有效、無效或變灰GetMenuItemCount決定彈出菜單或頂層菜單的項(xiàng)數(shù) 
            GetMenuItemID 
            獲取位于指定位置菜單項(xiàng)的菜單項(xiàng)標(biāo)識 
            GetMenuState 
            返回指定菜單項(xiàng)的狀態(tài)或彈出菜單的項(xiàng)數(shù) 
            GetMenuString 
            獲取指定菜單項(xiàng)的標(biāo)簽GetMenuItemInfo獲取有關(guān)菜單項(xiàng)的信息 
            GetSubMenu 
            獲取指向彈出菜單的指針 
            InsertMenu 
            在指定位置插入新菜單項(xiàng),并順次下移其它菜單項(xiàng) 
            ModifyMenu 
            改變指定位置的已存在的菜單項(xiàng) 
            RemoveMenu 
            從指定的菜單中刪除與彈出菜單相關(guān)聯(lián)的菜單項(xiàng) 
            SetMenuItemBitmaps 
            將指定檢測標(biāo)記的位圖與菜單項(xiàng)關(guān)聯(lián) 
            GetMenuCountextHelpID 
            獲取與菜單關(guān)聯(lián)的幫助文本的ID號 
            SetMenuCountextHelpID 
            設(shè)置與菜單關(guān)聯(lián)的幫助文本的ID號
              可覆蓋的函數(shù)
              
            DrawItem 
            通過框架來調(diào)用,其發(fā)生于擁有者菜單的可視部分有所改變 
            MeasureItem 
            通過框架來調(diào)用,用于決定當(dāng)創(chuàng)建了擁有者菜單時(shí)的菜單維數(shù)

            posted @ 2012-10-24 10:47 盛勝 閱讀(360) | 評論 (0)編輯 收藏

            MFC ListBox(列表框)的使用

             

            1添加數(shù)據(jù)

            聲明控件變量的類別為Control,變量類型為CListBox,變量名為m_ListBox_Content.

            m_ListBox_Content.AddString(_T("123"));

            m_ListBox_Content.AddString(_T("漢字"));

            m_ListBox_Content.AddString(_T("English"));

            m_ListBox_Content.AddString(_T("!@#$%^&*()"));

            2獲取數(shù)據(jù)

            CString s;

            m_ListBox_Content.GetText(1,s);

            MessageBox(s,_T("取得第2行數(shù)據(jù)"),MB_OK);

            s.ReleaseBuffer();

             

            將會得到"漢字"這個(gè)字符串,如果沒有得到"漢字"這個(gè)字符串,是因?yàn)?/span>ListBoxSort屬性設(shè)為True.設(shè)為False之后就按照你編寫的順序?qū)懭?/span>.

             

            3獲取選擇的數(shù)據(jù)

            首先要將ListBoxSelection屬性設(shè)置為Multiple;

            int nSel;

            nSel=m_ListBox_Content.GetCurSel();

            CString s;

            m_ListBox_Content.GetText(nSel,s);

            MessageBox(s,_T("您選擇的是"),MB_OK);

            s.ReleaseBuffer();

             

             

            4獲取選擇ListBox項(xiàng)的多個(gè)數(shù)據(jù)

             

            首先要將ListBoxSelection的屬性設(shè)置為Multiple

             

            int nSel = m_ListBox_Content.GetSelCount();

            CArray< int,int& > arrayListSel;

            arrayListSel.SetSize(nSel);   

            m_ListBox_Content.GetSelItems(nSel,arrayListSel.GetData());   

            CString s = _T("");

            for( int i=0; i< nSel; i++ )

            {

            m_ListBox_Content.GetText( arrayListSel[i], s);

            MessageBox(s,_T("您選擇的是"),MB_OK);

            }

             

             

            5雙擊刪除所選項(xiàng)

            添加一個(gè)ListBox的雙擊事件

            m_ListBox_Content.DeleteString(m_ListBox_Content.GetCurSel());

             

            posted @ 2012-10-23 08:54 盛勝 閱讀(2157) | 評論 (0)編輯 收藏

            MFC中有許多控件,將控件拖到窗口中右鍵鼠標(biāo),點(diǎn)擊屬性,到樣式標(biāo)簽頁中會有很多樣式可以選擇

            但是往往這些樣式會滿足不了我們的需求,這時(shí)候,我們需要自己來完成我們想要的樣式控件

            我們就來拿ListBox為例子,因?yàn)槲野l(fā)現(xiàn)ListBox的樣式擴(kuò)展的需求量是最大的

            (1)在Dialog中拖入ListBox控件

            (2)在類視圖添加一個(gè)該控件的子類

            (3)然后按Ctrl+W在類向?qū)е薪o你的控件加一個(gè)CColorListBox的變量

            (4)可以開始為你的CColorListBox添加樣式了

            1. int CColorListBox::AddMsg(CString lpszItem, DWORD info)  
            2. {  
            3.     int nItem = AddString(lpszItem);  
            4.     if (nItem >= 0)  
            5.         SetItemData(nItem,info);  
            6.     int numList = GetCount()-1;  
            7.     SetTopIndex(numList);  
            8.     SetCurSel(numList);  
            9.     //水平滾動  
            10.     int max_width=0;  
            11.     CSize sz;  
            12.     CClientDC dc(this);  
            13.     for(int i=0;i<GetCount();i++)  
            14.     {  
            15.         GetText(i,lpszItem);  
            16.         sz=dc.GetTextExtent(lpszItem);  
            17.         if(max_width<sz.cx)  
            18.             max_width=sz.cx;  
            19.     }  
            20.     SendMessage(LB_SETHORIZONTALEXTENT,max_width,0);  
            21.   
            22.     return nItem;  
            23. }  
            1. void CColorListBox::DrawItem(LPDRAWITEMSTRUCT lpDIS)   
            2. {  
            3.     // TODO: Add your code to draw the specified item  
            4.     if ((int)lpDIS->itemID < 0)  
            5.         return;   
            6.   
            7.     CDC *pDC = CDC::FromHandle(lpDIS->hDC);  
            8.   
            9.     COLORREF crText;  
            10.     CString sText;  
            11.     COLORREF crNorm;  
            12.     HICON icon;  
            13.     switch (lpDIS->itemData)  
            14.     {  
            15.         case M_OK:  
            16.             crNorm = #00ff00;  
            17.             icon = AfxGetApp()->LoadIcon(IDI_ICON_OK);  
            18.             break;  
            19.         case M_ERROR:  
            20.             crNorm=#ff0000;  
            21.             icon = AfxGetApp()->LoadIcon(IDI_ICON_ERROR);  
            22.             break;  
            23.         case M_WARING:  
            24.             crNorm=#0000ff;  
            25.             icon = AfxGetApp()->LoadIcon(IDI_ICON_WARING);  
            26.             break;  
            27.         case M_USER:  
            28.             crNorm=#00ff00;  
            29.             icon = AfxGetApp()->LoadIcon(IDI_ICON_USER);  
            30.             break;  
            31.         case M_USER_:  
            32.             crNorm=#000000;  
            33.             icon = AfxGetApp()->LoadIcon(IDI_ICON_USER_);  
            34.             break;  
            35.     }  
            36.   
            37.   
            38.     // 字符串顏色  
            39.     COLORREF crHilite = RGB(255-GetRValue(crNorm), 255-GetGValue(crNorm), 255-GetBValue(crNorm));  
            40.     CRect rectBK(lpDIS->rcItem.left+22,lpDIS->rcItem.top,lpDIS->rcItem.right+18,lpDIS->rcItem.bottom);  
            41.   
            42.   
            43.     // 如果被選中,使用高亮色會矩形  
            44.     if ((lpDIS->itemState & ODS_SELECTED) &&  
            45.          (lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))  
            46.     {  
            47.         CBrush brush(crNorm);  
            48.         pDC->FillRect(rectBK, &brush);  
            49.     }  
            50.   
            51.     // 如果取消選中,恢復(fù)  
            52.     if (!(lpDIS->itemState & ODS_SELECTED) &&    (lpDIS->itemAction & ODA_SELECT))  
            53.     {  
            54.         CBrush brush(::GetSysColor(COLOR_WINDOW));  
            55.         pDC->FillRect(rectBK, &brush);  
            56.     }         
            57.   
            58.     // 繪制焦點(diǎn)矩形  
            59.     if ((lpDIS->itemAction & ODA_FOCUS) && (lpDIS->itemState & ODS_FOCUS))  
            60.         pDC->DrawFocusRect(&lpDIS->rcItem);   
            61.   
            62.     // 取消焦點(diǎn)矩形  
            63.     if ((lpDIS->itemAction & ODA_FOCUS) &&   !(lpDIS->itemState & ODS_FOCUS))  
            64.         pDC->DrawFocusRect(&lpDIS->rcItem);   
            65.   
            66.   
            67.     // 透明背景  
            68.     int nBkMode = pDC->SetBkMode(TRANSPARENT);  
            69.   
            70.       
            71.     if (lpDIS->itemData)       
            72.     {  
            73.         if (lpDIS->itemState & ODS_SELECTED)  
            74.             crText = pDC->SetTextColor(crHilite);  
            75.         else if (lpDIS->itemState & ODS_DISABLED)  
            76.             crText = pDC->SetTextColor(::GetSysColor(COLOR_GRAYTEXT));  
            77.         else  
            78.             crText = pDC->SetTextColor(crNorm);  
            79.     }  
            80.       
            81.     else  
            82.     {  
            83.         if (lpDIS->itemState & ODS_SELECTED)  
            84.             crText = pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));  
            85.         else if (lpDIS->itemState & ODS_DISABLED)  
            86.             crText = pDC->SetTextColor(::GetSysColor(COLOR_GRAYTEXT));  
            87.         else  
            88.             crText = pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));  
            89.     }  
            90.   
            91.   
            92.     // 顯示字符串  
            93.     GetText(lpDIS->itemID, sText);  
            94.     CRect rect = lpDIS->rcItem;  
            95.   
            96.     // 字符格式  
            97.     UINT nFormat = DT_LEFT | DT_SINGLELINE | DT_VCENTER;  
            98.     if (GetStyle() & LBS_USETABSTOPS)  
            99.         nFormat |= DT_EXPANDTABS;  
            100.       
            101.   
            102.     pDC->DrawText(sText, -1, &rectBK, nFormat | DT_CALCRECT&DT_CENTER);  
            103.     pDC->DrawText(sText, -1, &rectBK, nFormat);  
            104.     DrawIconEx(lpDIS->hDC,rect.left+2,rect.top+1,icon,16,16,0,NULL, DI_NORMAL | DI_COMPAT);  
            105.   
            106.     pDC->SetTextColor(crText);   
            107.     pDC->SetBkMode(nBkMode);   
            108. }  

            關(guān)于改變成什么樣子的,就要好好運(yùn)用windows編程里面的知識了

            (5)最重要的一點(diǎn):右鍵控件點(diǎn)開屬性中的樣式(Styles)將所有者下拉框改成可變的(variable)把有字符串(has strings)勾上
            最終的效果是:

            posted @ 2012-10-22 17:08 盛勝 閱讀(563) | 評論 (0)編輯 收藏

            Combo Box (組合框)控件很簡單,可以節(jié)省空間。從用戶角度來看,這個(gè)控件是由一個(gè)文本輸入控件和一個(gè)下拉菜單組成的。用戶可以從一個(gè)預(yù)先定義的列表里選擇一個(gè)選項(xiàng),同時(shí)也可以直接在文本框里面輸入文本。下面的例子簡要說明如何利用 MFC CComboBox Class來操作字符串列表。

            1、定義控件對應(yīng)變量

            假定已經(jīng)創(chuàng)建了一個(gè)Dialog,并且給該Dialog建立了類,并且從控件工具箱將 Combo Box 控件拖放到上面。打開 Class Wizard,添加控件對應(yīng)變量,如:CComboBox m_cbExamble;在后面的代碼中會不斷使用這個(gè)變量。

            為該下拉框建立相應(yīng)的響應(yīng)函數(shù),該響應(yīng)函數(shù)應(yīng)該是在Dialog建立的類下

            2、向控件添加 Items

                   1) 在Combo Box控件屬性的Data標(biāo)簽里面添加,一行表示Combo Box下拉列表中的一行。換行用ctrl+回車。

            2) 利用函數(shù) AddString() 向 Combo Box 控件添加 Items,如:

            m_cbExample.AddString(“StringData1”);

            m_cbExample.AddString(“StringData2”);

            m_cbExample.AddString(“StringData3”);

            3) 也可以調(diào)用函數(shù) InsertString() 將 Item 插入指定位置 nIndex,如:

            m_cbExample.InsertString( nIndex, “StringData” );

            為了使添加Items后光標(biāo)會停留在第一個(gè)Items上可以用m_cbExample.SetCurSel(0);來實(shí)現(xiàn)

            3、從控件得到選定的Item

            假設(shè)在控件列表中已經(jīng)選定某項(xiàng),現(xiàn)在要得到被選定項(xiàng)的內(nèi)容,首先要得到該項(xiàng)的位置,然后得到對應(yīng)位置的內(nèi)容。這里會用到兩個(gè)函數(shù),如:

            int nIndex = m_cbExample.GetCurSel();

            CString strCBText;

            m_cbExample.GetLBText( nIndex, strCBText);

            這樣,得到的內(nèi)容就保存在 strCBText 中。

            若要選取當(dāng)前內(nèi)容,可調(diào)用函數(shù)GetWindowText(strCBText)。

            4、在控件中查找給定Item

            這種操作一般用于在程序中動態(tài)修改控件中該項(xiàng)的值,可以用函數(shù)FindStringExact() 精確匹配,如:

            int nIndex = m_cbExample.FindStringExact( nStartAfter, “value to be found”);

            nStartAfter指明從哪一行開始查找。如果查找成功,返回的是該項(xiàng)的位置;否則,返回CB_ERR。

            也可以選中包含指定字符串的項(xiàng),如:

            int nIndex = m_cbExample.SelectString( nStartAfter, “value to be selected”);

            5、刪除控件中的Item

            該操作可以利用函數(shù)DeleteString(),需要指定被刪除項(xiàng)的位置,如:

            m_cbExample.DeleteString(nIndex);

            也可以使用函數(shù)ResetContent(),清除目前的所有項(xiàng),如:

            m_cbExample.ResetContent();

            6、顯示控件中的某項(xiàng)

            int nIndex = m_cbExample.GetCurSel(); //當(dāng)前選中的項(xiàng)

            m_cbExample.SetCurSel(nIndex); //設(shè)置第nIndex項(xiàng)為顯示的內(nèi)容

            7、得到或設(shè)置輸入框中被選中的字符位置

            DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar );

            BOOL LimitText( int nMaxChars ); 設(shè)置輸入框中可輸入的最大字符數(shù)。

            8、列表框常用消息映射宏

            ON_CBN宏對應(yīng)事件
            ON_CBN_CLOSEUP關(guān)閉下拉列表。
            ON_CBN_DBLCLK雙擊下拉列表中的項(xiàng)目。
            ON_CBN_DROPDOWN下拉顯示列表框。
            ON_CBN_EDITCHANGE編輯框中文本內(nèi)容被改動。
            ON_CBN_EDITUPDATE編輯框內(nèi)容更新顯示。
            ON_CBN_ERRSPACE組合框不能為某個(gè)特殊請求分配足夠的內(nèi)存。
            ON_CBN_SELENDCANCEL用戶的選擇被取消。
            ON_CBN_SELENDOK用戶選擇了一個(gè)項(xiàng)目并且通過回車鍵或按下鼠標(biāo)而隱藏組合框的下拉列表。
            ON_CBN_KILLFOCUS組合框失去焦點(diǎn)。
            ON_CBN_SELCHANGE選擇發(fā)生變化。
            ON_CBN_SETFOCUS組合框獲得輸入焦點(diǎn)。


            窗口風(fēng)格
            窗口風(fēng)格說明
            CBS_AUTOHSCROLL當(dāng)在行尾輸入字符時(shí)自動將編輯框中的文字向右滾動。
            CBS_DROPDOWN同CBS_SIMPLE風(fēng)格類似,只是只有在用戶點(diǎn)擊下拉圖標(biāo)時(shí)才會顯示出下拉列表。
            CBS_DROPDOWNLIST同CBS_DROPDOWN類似,只是顯示當(dāng)前選項(xiàng)的編輯框?yàn)橐混o態(tài)框所代替。
            CBS_HASSTRINGS創(chuàng)建一個(gè)包含了由字串組成的項(xiàng)目的擁有者畫組合框。
            CBS_OEMCONVERT將組合框中的ANSI字串轉(zhuǎn)化為OEM字符。
            CBS_OWNERDRAWFIXED由下拉列表框的擁有者負(fù)責(zé)對內(nèi)容的繪制;列表框中各項(xiàng)目高度相同。
            CBS_OWNERDRAWVARIABLE由下拉列表框的擁有者負(fù)責(zé)對內(nèi)容的繪制;列表框中各項(xiàng)目高度可以不同。
            CBS_SIMPLE下拉列表始終顯示。
            CBS_SORT自動對下拉列表中的項(xiàng)目進(jìn)行排序。
            CBS_DISABLENOSCROLL當(dāng)下拉列表顯示內(nèi)容過少時(shí)顯示垂直滾動條。
            CBS_NOINTEGRALHEIGHT在創(chuàng)建控件時(shí)以指定的大小來精確設(shè)定組合框尺寸。

            posted @ 2012-10-22 11:46 盛勝 閱讀(12543) | 評論 (0)編輯 收藏

            僅列出標(biāo)題
            共14頁: First 5 6 7 8 9 10 11 12 13 Last 
            久久免费精品视频| 欧美一级久久久久久久大| 漂亮人妻被黑人久久精品| 久久av无码专区亚洲av桃花岛| 亚洲日韩中文无码久久| 99久久国产主播综合精品 | 国产精品久久国产精品99盘 | 亚洲国产精品18久久久久久| 久久强奷乱码老熟女| 精品永久久福利一区二区| 久久久久综合网久久| 青青草国产97免久久费观看| 色老头网站久久网| 久久久免费观成人影院| 囯产精品久久久久久久久蜜桃| AAA级久久久精品无码片| 久久精品女人天堂AV麻| 99久久综合狠狠综合久久止| 国产激情久久久久影院小草 | 国产亚洲成人久久| 久久国产乱子精品免费女| 久久久久99精品成人片直播| 91亚洲国产成人久久精品网址| 性做久久久久久久久老女人| 97久久超碰国产精品旧版| 久久综合伊人77777| 97久久天天综合色天天综合色hd| 色综合久久中文字幕综合网| 国产精品久久波多野结衣| 伊人久久精品影院| 国内精品伊人久久久影院| 伊人情人综合成人久久网小说| 国内精品人妻无码久久久影院| 久久精品国产精品亜洲毛片| 国产Av激情久久无码天堂| 一本色道久久88综合日韩精品 | 伊人久久大香线蕉影院95| 一本色道久久综合亚洲精品| 开心久久婷婷综合中文字幕| 久久久久综合网久久| 国产美女久久精品香蕉69|