• <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. 99精品久久精品| 亚洲成色WWW久久网站| 精品久久久久久亚洲| 精品多毛少妇人妻AV免费久久| 国产巨作麻豆欧美亚洲综合久久| 人妻无码αv中文字幕久久琪琪布| 亚洲精品tv久久久久久久久| 国产精品va久久久久久久| 亚洲中文字幕久久精品无码APP | 久久精品免费网站网| 2021国内久久精品| 狠狠色伊人久久精品综合网| 99蜜桃臀久久久欧美精品网站| 国产激情久久久久影院小草| 亚洲中文精品久久久久久不卡| 欧美性大战久久久久久| 久久美女人爽女人爽| 亚洲中文字幕无码一久久区| 麻豆久久久9性大片| 久久性精品| 精品久久综合1区2区3区激情| 潮喷大喷水系列无码久久精品 | 99久久夜色精品国产网站| 午夜精品久久久久久99热| 久久久久九国产精品| 久久免费视频观看| 99久久99这里只有免费费精品| 久久午夜免费视频| 久久久久女教师免费一区| 91精品国产高清久久久久久91| 久久精品国产亚洲av日韩 | 丰满少妇人妻久久久久久| 日韩精品久久无码人妻中文字幕| 亚洲日韩欧美一区久久久久我 | 久久久久久久精品成人热色戒| 久久久久久久亚洲精品| 看全色黄大色大片免费久久久| 久久国产成人| 中文字幕无码久久精品青草| 性做久久久久久久久浪潮| 精品久久久久久国产|