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

            使用自繪控件詳細(xì)步驟

            Posted on 2010-12-03 01:24 Tinpont 閱讀(1566) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++/MFC
            本文的焦點(diǎn)更多地偏重于控件繪制技術(shù)而非高級(jí)的繪制技術(shù),我們將演練一個(gè)簡(jiǎn)單的示例,其中列表視圖控件是一個(gè)自定義的繪制,因此項(xiàng)的文本將在創(chuàng)建拼接外觀的交替單元中顯示為不同的顏色。

          1. 創(chuàng)建一個(gè)基于 Visual C++ 2005 對(duì)話框的項(xiàng)目,名為 ListCtrlColor。

          2. Class View 中選擇 Project 菜單選項(xiàng),并單擊 Add Class 調(diào)用 Add Class 對(duì)話框。

          3. 從分類列表中選擇 MFC,然后從模板列表中選擇 MFC Class。

          4. 單擊 Add 按鈕,調(diào)用 MFC Class Wizard 對(duì)話框。

          5. 對(duì)于 Class name,鍵入值 CListCtrlWithCustomDraw 并選擇 CListCtrlBase class。

          6. 單擊 Finish 按鈕,生成類的標(biāo)頭和執(zhí)行文件。

          7. 對(duì)于 Class View,右鍵單擊 CListCtrlWithCustomDraw 類,并選擇 Properties 上下文菜單選項(xiàng)。

          8. 顯示 Properties 窗口時(shí),單擊頂部的 Messages 按鈕,顯示一個(gè)兩列的消息列表,您可以為其實(shí)現(xiàn)處理程序。

          9. 在消息列表中單擊 NM_CUSTOMDRAW 項(xiàng),然后下拉第二列的組合框箭頭,并選擇值 OnNMCustomdraw

          10. 現(xiàn)在,處理繪制代碼。這里,我們只簡(jiǎn)單處理項(xiàng)和子項(xiàng)預(yù)繪制階段,指定基于當(dāng)前行(項(xiàng))和列(子項(xiàng))的文本和背景色。要進(jìn)行此操作,按如下所示修改 OnNMCustomdraw 函數(shù):


             

            void CListCtrlWithCustomDraw::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
            {
              LPNMLVCUSTOMDRAW lpLVCustomDraw 
            = reinterpret_cast(pNMHDR);

              
            switch(lpLVCustomDraw->nmcd.dwDrawStage)
              
            {
                
            case CDDS_ITEMPREPAINT:
                
            case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
                  
            if (0 == ((lpLVCustomDraw->nmcd.dwItemSpec + lpLVCustomDraw->iSubItem) % 2))
                  
            {
                    lpLVCustomDraw
            ->clrText = RGB(255,255,255); // white text
                    lpLVCustomDraw->clrTextBk = RGB(0,0,0); // black background
                  }

                  
            else 
                  
            {
                    lpLVCustomDraw
            ->clrText = CLR_DEFAULT;
                    lpLVCustomDraw
            ->clrTextBk = CLR_DEFAULT;
                  }

                
            break;

                
            defaultbreak;    
              }


              
            *pResult = 0;
              
            *pResult |= CDRF_NOTIFYPOSTPAINT;
              
            *pResult |= CDRF_NOTIFYITEMDRAW;
              
            *pResult |= CDRF_NOTIFYSUBITEMDRAW;
            }



            現(xiàn)在,我們來測(cè)試新控件。要進(jìn)行此操作,您只需使用 CListCtrlWithCustomDraw 類將列表視圖控件放在對(duì)話框中,并對(duì)其進(jìn)行子類派生。下面是完成該操作的步驟。

            • Resource 視圖中,打開應(yīng)用程序的主對(duì)話框 (IDD_LISTCTRLCOLOR_DIALOG)。

            • Toolbox 中,將一個(gè) List Control 拖放到該對(duì)話框。

            • 右鍵單擊列表控件,并選擇 Properties 上下文菜單選項(xiàng)。

            • View 屬性設(shè)置為 Report。

            • 右鍵單擊控件,并選擇 Add Variable 上下文菜單選項(xiàng)。

            • 出現(xiàn) Add Member Variable Wizard 對(duì)話框時(shí),指定 m_lstBooksVariable name,并單擊 Finish 按鈕。

            • 這時(shí),您就有了一個(gè) CListCtrl 派生類 (m_lstBooks),它將對(duì)話框上的列表視圖控件進(jìn)行子類派生。然而,m_lstBooks 需要從最新創(chuàng)建的 CListCtrlWithCustomDraw 派生,以便于調(diào)用您的繪制代碼。因此,打開對(duì)話框的標(biāo)題文件 (ListCtrlColorDlg.h),將 m_lstBooks 更改為 CListCtrlWithCustomDraw 類型。

            • CListCtrlColorDlg 類開始之前,添加以下指令。

              #include "ListCtrlWithCustomDraw.h"
                  
            • 將下面的代碼添加到對(duì)話框的 OnInitDialog 成員函數(shù),這樣我們就能夠看到一些列表視圖行。

            // Insert the columns
            m_lstBooks.InsertColumn(0, _T("Author"));
            m_lstBooks.InsertColumn(
            1, _T("Book"));

            // Define the data
            static struct 
            {
              TCHAR m_szAuthor[
            50];
              TCHAR m_szTitle[
            100];
            }
             BOOK_INFO[] = {
            _T(
            "Tom Archer"), _T("Visual C++.NET Bible"),
            _T(
            "Tom Archer"), _T("Extending MFC with the .NET Framework"),
            _T(
            "Brian Johnson"), _T("XBox 360 For Dummies")
            }
            ;

            // Insert the data
            int idx;
            for (int i = 0; i < sizeof BOOK_INFO / sizeof BOOK_INFO[0]; i++)
            {
              idx 
            = m_lstBooks.InsertItem(i, BOOK_INFO[i].m_szAuthor);
              m_lstBooks.SetItemText(i, 
            1, BOOK_INFO[i].m_szTitle);
            }


             

          11. 現(xiàn)在,建立并運(yùn)行應(yīng)用程序。圖 1 為應(yīng)用程序外觀的一個(gè)示例。

            圖 1. 自定義繪制示例應(yīng)用程序

            小結(jié)

            當(dāng) Windows 首次作為“下一代”操作系統(tǒng)引入到應(yīng)用程序開發(fā)之中時(shí),它作為新圖形用戶界面的一個(gè)主要論據(jù)就是其一致性。該論據(jù)的要點(diǎn)所在是其具有一個(gè)通用的外觀:統(tǒng)一的菜單項(xiàng)、通用控件等。這一通用性的感覺可能會(huì)一直延續(xù),直到有第二家公司想設(shè)計(jì)其自己的應(yīng)用程序。簡(jiǎn)單說,提供外觀與其他應(yīng)用程序雷同的應(yīng)用程序,任何公司都不會(huì)逃離這一怪圈。

            要建立一個(gè)唯一的且讓人過目難忘的用戶界面,其中一種方式是為應(yīng)用程序設(shè)計(jì)并開發(fā)自定義的控件。希望本文能對(duì)您有所幫助,現(xiàn)在,您了解到一種非常強(qiáng)大的技術(shù),它使您的應(yīng)用程序能從眾多競(jìng)爭(zhēng)對(duì)手的應(yīng)用程序中脫穎而出。

          12. 久久综合九色欧美综合狠狠| 色8久久人人97超碰香蕉987| 久久国产精品无码网站| 精品久久久久一区二区三区| 亚洲国产成人乱码精品女人久久久不卡| 色偷偷91久久综合噜噜噜噜 | 亚洲国产欧洲综合997久久| 精品午夜久久福利大片| 久久涩综合| 99久久综合国产精品免费| 亚洲va久久久噜噜噜久久| 久久精品国产免费一区| 日韩人妻无码一区二区三区久久99| 久久久久久亚洲精品成人| 91精品国产高清久久久久久91| 久久AV无码精品人妻糸列| 久久狠狠色狠狠色综合| 无码人妻精品一区二区三区久久| 亚洲综合精品香蕉久久网97| 久久久婷婷五月亚洲97号色 | 久久综合给合久久狠狠狠97色| 亚洲国产成人久久综合碰| 国内精品伊人久久久久| 天堂久久天堂AV色综合| 国产成人无码精品久久久免费| 久久国产视频99电影| 国内精品久久久久久99蜜桃| 免费精品久久天干天干| 欧美国产成人久久精品| 久久男人中文字幕资源站| 精品久久久久久综合日本| 久久综合精品国产二区无码| 精品国产乱码久久久久久呢| 亚洲国产视频久久| 精品国产日韩久久亚洲| 模特私拍国产精品久久| 亚洲人成电影网站久久| 久久久噜噜噜久久中文字幕色伊伊 | 老司机午夜网站国内精品久久久久久久久 | 亚洲欧洲中文日韩久久AV乱码| 久久久久久亚洲精品无码|