• <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 一個建庫和建表的實例27.1 一個建庫和建表的實例11、連接Mysql...  閱讀全文

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

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

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

            MFC的圖片按鈕  

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

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

            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ù)外面才能正常實現(xiàn)
            3
            4BOOL CXXXXXXX::OnInitDialog()
            5{
            6CDialog::OnInitDialog();
            7
            8m_btnX1.LoadBitmaps(IDB_XXXX_UP,IDB_XXXX_DOWN);
            9//這里是兩副位圖,鼠標(biāo)按下和彈起,
            10// 也可以只加一個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)的圖片,否則會出錯。
            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)。
            如資源編輯時,希望關(guān)聯(lián)的按鈕的Caption為Test,
            那么其默認(rèn)裝載的位圖資源的ID為:"TestU"/"TestD"/"TestF"/"TestX",
            注意分號""也是其ID的一部分。
            方法二例子:
            首先,選中Caption為:"myBitmapButton"按鈕的owner Draw屬性
            其次,添加兩個位圖資源,并修改其ID分別為:"myBitmapButtonU"和"myBitmapButtonD",這里只添加兩個位圖
            然后在對話框類中加入:
            1 CBitmapButton m_btnX1;//必須放在函數(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 盛勝 閱讀(1151) | 評論 (0)編輯 收藏

            新建一個MFC項目
            在類視圖中添加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)建一個與指定設(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)色板而言,該顏色為黑色)。 DSTINVERT:表示使目標(biāo)矩形區(qū)域顏色取反。 MERGECOPY:表示使用布爾型的AND(與)操作符將源矩形區(qū)域的顏色與特定模式組合一起。 MERGEPAINT:通過使用布爾型的OR(或)操作符將反向的源矩形區(qū)域的顏色與目標(biāo)矩形區(qū)域的顏色合并。 NOTSRCCOPY:將源矩形區(qū)域顏色取反,再拷貝到目標(biāo)矩形區(qū)域。 NOTSRCERASE:使用布爾類型的OR(或)操作符組合源和目標(biāo)矩形區(qū)域的顏色值,然后將合成的顏色取反。 PATCOPY:將特定的模式拷貝到目標(biāo)位圖上。 PATPAINT:通過使用布爾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ū)域。 SRCERASE:通過使用AND(與)操作符將目標(biāo)矩形區(qū)域顏色取反后與源矩形區(qū)域的顏色值合并。 SRCINVERT:通過使用布爾型的XOR(異或)操作符將源和目標(biāo)矩形區(qū)域的顏色合并。 SRCPAINT:通過使用布爾型的OR(或)操作符將源和目標(biāo)矩形區(qū)域的顏色合并。 WHITENESS:使用與物理調(diào)色板中索引1有關(guān)的顏色填充目標(biāo)矩形區(qū)域。(對于缺省物理調(diào)色板來說,這個顏色就是白色)

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

            一、禁止對話框的移動
            (1)、第一種方法
            為這個對話框添加系統(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 盛勝 閱讀(1480) | 評論 (0)編輯 收藏

            方法一:

            在Dialog::OnInitDialog()中加入:

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

             

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

             

            方法二:
            先取得分辨率,

            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);


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

             

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

            不過呢,只能在OnSize里面自己調(diào)整控件的大小的位置,需要自己一個一個地調(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 盛勝 閱讀(466) | 評論 (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ù)在指定位置顯示快捷菜單,并跟蹤菜單項的選擇
                      //TPM_LEFTBUTTON:若設(shè)置此標(biāo)志,用戶只能用鼠標(biāo)左鍵選擇菜單項。  
                      //TPM_RIGHTBUTTON:若設(shè)置此標(biāo)志,用戶能用鼠標(biāo)左、右鍵選擇菜單項。
                      //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)造一個CMenu對象
              初始化
              
            Attach 
            附加一個Windows菜單句柄給CMenu對象 
            Detach 
            從CMenu對象中分離Windows菜單的句柄,并返回該句柄 
            FromHandle 
            返回一個指向給定Windows菜單句柄的CMenu對象的指針 
            GetSafeHmenu 
            返回由CMenu對象包含的m_hMenu值 
            DeleteTempMap 
            刪除由FromHandle成員函數(shù)創(chuàng)建的所有臨時CMenu對象 
            CreateMenu 
            創(chuàng)建一個空菜單,并將其附加給CMenu對象 
            CreatePopupMenu 
            創(chuàng)建一個空的彈出菜單,并將其附加給CMenu對象 
            LoadMenu 
            從可執(zhí)行文件中裝載菜單資源,并將其附加給CMenu對象LoadMenuIndirect從內(nèi)存的菜單模板中裝載菜單,并將其附加給CMenu對象 
            DestroyMenu 
            銷毀附加給CMenu對象的菜單,并釋放菜單占用的內(nèi)存
              菜單操作
              
            DeleteMenu 
            從菜單中刪除指定的項。如果菜單項與彈出菜單相關(guān)聯(lián),那么將銷毀彈出菜單的句柄,并釋放它占用的內(nèi)存 
            TrackPopupMenu 
            在指定的位置顯示浮動菜單,并跟蹤彈出菜單的選擇項
              菜單項操作
              
            AppendMenu 
            在該菜單末尾添加新的菜單項 
            CheckMenuItem 
            在彈出菜單的菜單項中放置或刪除檢測標(biāo)記 
            CheckMenuRadioItem 
            將單選鈕放置在菜單項之前,或從組中所有的其它菜單項中刪除單選鈕 
            SetDefaultItem 
            為指定的菜單設(shè)置缺省的菜單項GetDefaultItem獲取指定的菜單缺省的菜單項 
            EnableMenuItem 
            使菜單項有效、無效或變灰GetMenuItemCount決定彈出菜單或頂層菜單的項數(shù) 
            GetMenuItemID 
            獲取位于指定位置菜單項的菜單項標(biāo)識 
            GetMenuState 
            返回指定菜單項的狀態(tài)或彈出菜單的項數(shù) 
            GetMenuString 
            獲取指定菜單項的標(biāo)簽GetMenuItemInfo獲取有關(guān)菜單項的信息 
            GetSubMenu 
            獲取指向彈出菜單的指針 
            InsertMenu 
            在指定位置插入新菜單項,并順次下移其它菜單項 
            ModifyMenu 
            改變指定位置的已存在的菜單項 
            RemoveMenu 
            從指定的菜單中刪除與彈出菜單相關(guān)聯(lián)的菜單項 
            SetMenuItemBitmaps 
            將指定檢測標(biāo)記的位圖與菜單項關(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ù)

            posted @ 2012-10-24 10:47 盛勝 閱讀(363) | 評論 (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();

             

            將會得到"漢字"這個字符串,如果沒有得到"漢字"這個字符串,是因為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項的多個數(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雙擊刪除所選項

            添加一個ListBox的雙擊事件

            m_ListBox_Content.DeleteString(m_ListBox_Content.GetCurSel());

             

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

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

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

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

            (1)在Dialog中拖入ListBox控件

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

            (3)然后按Ctrl+W在類向?qū)е薪o你的控件加一個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.     // 繪制焦點矩形  
            59.     if ((lpDIS->itemAction & ODA_FOCUS) && (lpDIS->itemState & ODS_FOCUS))  
            60.         pDC->DrawFocusRect(&lpDIS->rcItem);   
            61.   
            62.     // 取消焦點矩形  
            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)最重要的一點:右鍵控件點開屬性中的樣式(Styles)將所有者下拉框改成可變的(variable)把有字符串(has strings)勾上
            最終的效果是:

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

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

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

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

            為該下拉框建立相應(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)會停留在第一個Items上可以用m_cbExample.SetCurSel(0);來實現(xiàn)

            3、從控件得到選定的Item

            假設(shè)在控件列表中已經(jīng)選定某項,現(xiàn)在要得到被選定項的內(nèi)容,首先要得到該項的位置,然后得到對應(yīng)位置的內(nèi)容。這里會用到兩個函數(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)修改控件中該項的值,可以用函數(shù)FindStringExact() 精確匹配,如:

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

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

            也可以選中包含指定字符串的項,如:

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

            5、刪除控件中的Item

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

            m_cbExample.DeleteString(nIndex);

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

            m_cbExample.ResetContent();

            6、顯示控件中的某項

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

            m_cbExample.SetCurSel(nIndex); //設(shè)置第nIndex項為顯示的內(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雙擊下拉列表中的項目。
            ON_CBN_DROPDOWN下拉顯示列表框。
            ON_CBN_EDITCHANGE編輯框中文本內(nèi)容被改動。
            ON_CBN_EDITUPDATE編輯框內(nèi)容更新顯示。
            ON_CBN_ERRSPACE組合框不能為某個特殊請求分配足夠的內(nèi)存。
            ON_CBN_SELENDCANCEL用戶的選擇被取消。
            ON_CBN_SELENDOK用戶選擇了一個項目并且通過回車鍵或按下鼠標(biāo)而隱藏組合框的下拉列表。
            ON_CBN_KILLFOCUS組合框失去焦點。
            ON_CBN_SELCHANGE選擇發(fā)生變化。
            ON_CBN_SETFOCUS組合框獲得輸入焦點。


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

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

            僅列出標(biāo)題
            共14頁: First 5 6 7 8 9 10 11 12 13 Last 
            国产三级观看久久| 色综合合久久天天给综看| 久久精品中文字幕有码| 国产一级持黄大片99久久| 少妇久久久久久被弄高潮| 思思久久好好热精品国产| 久久久久亚洲AV成人网人人软件| 日韩人妻无码精品久久久不卡 | 69久久夜色精品国产69| 久久人人爽人人爽人人片AV不| 婷婷久久综合九色综合九七| 理论片午午伦夜理片久久 | 亚洲AV无码久久| 老男人久久青草av高清| 精品伊人久久大线蕉色首页| 亚洲中文字幕久久精品无码APP| 中文字幕热久久久久久久| 日产精品久久久一区二区| 久久精品国产亚洲av高清漫画 | 久久九九青青国产精品| 色综合久久精品中文字幕首页| 久久这里只精品国产99热| 狠狠综合久久综合中文88| 性做久久久久久免费观看| 无码国内精品久久人妻蜜桃| 狠狠色噜噜狠狠狠狠狠色综合久久| 国产精品无码久久四虎| 国内精品久久久久影院亚洲| 久久综合给合久久狠狠狠97色 | 亚洲国产精品高清久久久| 国产亚洲综合久久系列| 91久久精品国产免费直播| 亚洲欧美国产日韩综合久久| 久久久久久九九99精品| 久久99国产精品成人欧美| 久久热这里只有精品在线观看| 久久99精品国产自在现线小黄鸭| 久久99久久无码毛片一区二区| 伊人久久精品无码二区麻豆| 久久综合丝袜日本网| 久久精品成人欧美大片|