• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

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

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

            數據庫操作,接口

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

            MFC的圖片按鈕  

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

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

            3、使用CBitmapButton::LoadBitmaps裝載各種狀態的圖片,
            使用CBitmapButton::SubclassDlgItem關聯到想要的按鈕,
            使用CBitmapButton::SizeToContent函數使按鈕適合圖片大小。
            注意Loadbitmaps一定要在關聯到按鈕之前進行!

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

            方法一的例子:
            首先,選中按鈕的owner Draw屬性,在資源中加載兩副*.bmp格式的位圖,
            然后在對話框類中加入:
            1CBitmapButton m_btnX1;
            2//定義變量,必須放在函數外面才能正常實現
            3
            4BOOL CXXXXXXX::OnInitDialog()
            5{
            6CDialog::OnInitDialog();
            7
            8m_btnX1.LoadBitmaps(IDB_XXXX_UP,IDB_XXXX_DOWN);
            9//這里是兩副位圖,鼠標按下和彈起,
            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函數關聯到想要的按鈕
            需要注意:
            A、使用CBitmapButton::AutoLoad函數之前不能使用CBitmapButton::LoadBitmaps裝載
            各種狀態的圖片,否則會出錯。
            B、AutoLoad函數完成關聯和改變按鈕大小的功能。類似于上面CBitmapButton::SubclassDlgItem
            和CBitmapButton::SizeToContent函數的功能。
            C、CBitmapButton::AutoLoad使用的位圖是默認資源ID的,即它會自動裝載相關資源位圖。
            位圖的資源ID格式為:
            "按鈕Caption+U"、"按鈕Caption+D"、"按鈕Caption+F"、"按鈕Caption+X",
            分別代表Up、Down、Focus、Disable狀態。
            如資源編輯時,希望關聯的按鈕的Caption為Test,
            那么其默認裝載的位圖資源的ID為:"TestU"/"TestD"/"TestF"/"TestX",
            注意分號""也是其ID的一部分。
            方法二例子:
            首先,選中Caption為:"myBitmapButton"按鈕的owner Draw屬性
            其次,添加兩個位圖資源,并修改其ID分別為:"myBitmapButtonU"和"myBitmapButtonD",這里只添加兩個位圖
            然后在對話框類中加入:
            1 CBitmapButton m_btnX1;//必須放在函數外面才能正常實現
            2 BOOL CXXXXXXX::OnInitDialog()
            3 {
            4 CDialog::OnInitDialog();

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

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

            新建一個MFC項目
            在類視圖中添加OnEraseBkgnd的消息響應函數,函數的編寫如下:
            BOOL CbackgDlg::OnEraseBkgnd(CDC* pDC)
            {
            // TODO: 在此添加消息處理程序代碼和/或調用默認值
            CDialog::OnEraseBkgnd(pDC);   
            if(!m_Bitmap.m_hObject)
            return true;
            CRect rect;
            GetClientRect(&rect);
                    //設備上下文對象的類
            CDC dc;
            //該函數創建一個與指定設備兼容的內存設備上下文環境(DC)
            dc.CreateCompatibleDC(pDC);
                    //該函數選擇一對象到指定的設備上下文環境中,該新對象替換先前的相同類型的對象
            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;
            并在窗口初始化函數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:指向目標設備環境的句柄。
              nXOriginDest:指定目標矩形左上角的X軸坐標,按邏輯單位表示坐標。
              nYOriginDest:指定目標矩形左上角的Y軸坐標,按邏輯單位表示坐標。
              nWidthDest:指定目標矩形的寬度,按邏輯單位表示寬度。
              nHeightDest:指定目標矩形的高度,按邏輯單位表示高度。
              hdcSrc:指向源設備環境的句柄。
              nXOriginSrc:指向源矩形區域左上角的X軸坐標,按邏輯單位表示坐標。
              nYOriginSrc:指向源矩形區域左上角的Y軸坐標,按邏輯單位表示坐標。
              nWidthSrc:指定源矩形的寬度,按邏輯單位表示寬度。
              nHeightSrc:指定源矩形的高度,按邏輯單位表示高度。
              dwRop:指定要進行的光柵操作。光柵操作碼定義了系統如何在輸出操作中組合顏色,這些操作包括刷子、源位圖和目標位圖等對象。參考BitBlt可了解常用的光柵操作碼列表。
              下面列出了一些常見的光柵操作代碼: BLACKNESS:表示使用與物理調色板的索引0相關的色彩來填充目標矩形區域,(對缺省的物理調色板而言,該顏色為黑色)。 DSTINVERT:表示使目標矩形區域顏色取反。 MERGECOPY:表示使用布爾型的AND(與)操作符將源矩形區域的顏色與特定模式組合一起。 MERGEPAINT:通過使用布爾型的OR(或)操作符將反向的源矩形區域的顏色與目標矩形區域的顏色合并。 NOTSRCCOPY:將源矩形區域顏色取反,再拷貝到目標矩形區域。 NOTSRCERASE:使用布爾類型的OR(或)操作符組合源和目標矩形區域的顏色值,然后將合成的顏色取反。 PATCOPY:將特定的模式拷貝到目標位圖上。 PATPAINT:通過使用布爾OR(或)操作符將源矩形區域取反后的顏色值與特定模式的顏色合并。然后使用OR(或)操作符將該操作的結果與目標矩形區域內的顏色合并。 PATINVERT:通過使用XOR(異或)操作符將源和目標矩形區域內的顏色合并。 SRCAND:通過使用AND(與)操作符來將源和目標矩形區域內的顏色合并。 SRCCOPY:將源矩形區域直接拷貝到目標矩形區域。 SRCERASE:通過使用AND(與)操作符將目標矩形區域顏色取反后與源矩形區域的顏色值合并。 SRCINVERT:通過使用布爾型的XOR(異或)操作符將源和目標矩形區域的顏色合并。 SRCPAINT:通過使用布爾型的OR(或)操作符將源和目標矩形區域的顏色合并。 WHITENESS:使用與物理調色板中索引1有關的顏色填充目標矩形區域。(對于缺省物理調色板來說,這個顏色就是白色)

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

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

            方法一:

            在Dialog::OnInitDialog()中加入:

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

             

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

             

            方法二:
            先取得分辨率,

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


            方法二因為獲得了窗口與屏幕的參數,所以當想調整Dialog上的一些控件位置時就方便許多。

             

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

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

            方法請看:

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

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


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

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

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

                      //ClientToScreen( )是把窗口坐標轉換為屏幕坐標
                      //ScreenToClient( )是把屏幕坐標轉換為窗口坐標
                      //屏幕坐標是相對于屏幕左上角的,而窗口坐標是相對于窗口用戶區左上角的
            ClientToScreen(&point);

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


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

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

            MFC ListBox(列表框)的使用

             

            1添加數據

            聲明控件變量的類別為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獲取數據

            CString s;

            m_ListBox_Content.GetText(1,s);

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

            s.ReleaseBuffer();

             

            將會得到"漢字"這個字符串,如果沒有得到"漢字"這個字符串,是因為ListBoxSort屬性設為True.設為False之后就按照你編寫的順序寫入.

             

            3獲取選擇的數據

            首先要將ListBoxSelection屬性設置為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項的多個數據

             

            首先要將ListBoxSelection的屬性設置為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 盛勝 閱讀(2170) | 評論 (0)編輯 收藏

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

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

            我們就來拿ListBox為例子,因為我發現ListBox的樣式擴展的需求量是最大的

            (1)在Dialog中拖入ListBox控件

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

            (3)然后按Ctrl+W在類向導中給你的控件加一個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.     // 如果取消選中,恢復  
            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. }  

            關于改變成什么樣子的,就要好好運用windows編程里面的知識了

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

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

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

            1、定義控件對應變量

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

            為該下拉框建立相應的響應函數,該響應函數應該是在Dialog建立的類下

            2、向控件添加 Items

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

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

            m_cbExample.AddString(“StringData1”);

            m_cbExample.AddString(“StringData2”);

            m_cbExample.AddString(“StringData3”);

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

            m_cbExample.InsertString( nIndex, “StringData” );

            為了使添加Items后光標會停留在第一個Items上可以用m_cbExample.SetCurSel(0);來實現

            3、從控件得到選定的Item

            假設在控件列表中已經選定某項,現在要得到被選定項的內容,首先要得到該項的位置,然后得到對應位置的內容。這里會用到兩個函數,如:

            int nIndex = m_cbExample.GetCurSel();

            CString strCBText;

            m_cbExample.GetLBText( nIndex, strCBText);

            這樣,得到的內容就保存在 strCBText 中。

            若要選取當前內容,可調用函數GetWindowText(strCBText)。

            4、在控件中查找給定Item

            這種操作一般用于在程序中動態修改控件中該項的值,可以用函數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

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

            m_cbExample.DeleteString(nIndex);

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

            m_cbExample.ResetContent();

            6、顯示控件中的某項

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

            m_cbExample.SetCurSel(nIndex); //設置第nIndex項為顯示的內容

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

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

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

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

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


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

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

            僅列出標題
            共14頁: First 5 6 7 8 9 10 11 12 13 Last 
            99麻豆久久久国产精品免费| 亚洲国产精品无码久久久蜜芽 | 久久久久久毛片免费看| 久久99亚洲综合精品首页| 久久久久亚洲国产| 国产成人精品久久二区二区| 久久中文字幕视频、最近更新| 97精品依人久久久大香线蕉97| 久久成人精品视频| 亚洲欧美日韩精品久久亚洲区| 久久99国产精品成人欧美| 国产叼嘿久久精品久久| 色播久久人人爽人人爽人人片AV| 99999久久久久久亚洲| 亚洲午夜精品久久久久久app| 国产情侣久久久久aⅴ免费| 国产亚洲精午夜久久久久久| 色8久久人人97超碰香蕉987| 久久婷婷五月综合成人D啪| 国产精品美女久久久久网| 久久精品蜜芽亚洲国产AV| 久久久久久久综合狠狠综合| 精品99久久aaa一级毛片| av国内精品久久久久影院| 久久精品aⅴ无码中文字字幕不卡 久久精品成人欧美大片 | 99国产精品久久久久久久成人热| 久久人人青草97香蕉| 久久最新免费视频| 精品久久人人做人人爽综合| 久久久青草久久久青草| 97久久综合精品久久久综合| 久久夜色精品国产噜噜亚洲AV| 亚洲AV无码久久精品狠狠爱浪潮| 精品国产日韩久久亚洲| 国产精品久久新婚兰兰| 一本久久综合亚洲鲁鲁五月天| 日本加勒比久久精品| 久久99精品久久久久久不卡| 久久综合日本熟妇| 久久福利资源国产精品999| 国产成人精品久久|