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

            積累的VC編程小技巧之編輯框

            1.如何讓對話框中的編輯框接收對話框的消息

            ////////////////////////////////////////////////
            // 如何讓對話框中的CEdit控件類接收對話框的消息
            ////////////////////////////////////////////////
            1、在對話框中增加一個ID IDC_EDIT1CEdit1控件
            2、通過ClassWizard 生成一個基于CEdit的新類CMyEdit,
            CMyEdit m_wndEdit;
            3、在對話框OnInitDialog()中,將m_wndEdit子類化,使其能夠接受對話框的消息。
            m_wndEdit.SubclassDlgItem (IDC_EDIT1,this);

            2.如何防止密碼被非法獲取?

            [問題提出]
            這兩天大家比較專注在獲取Edit密碼框的密碼.在盜取時,我們如何防范呢?

            [解決方法]
            此方法針對于通過SendMessage向此窗口發送WM_GETTEXTEM_GETLINE消息來取得密碼.跟我來.

            [程序實現]
            方法很簡單,CWnd::DefWindowProc函數攔截得到的消息(Edit發的).
            建立名為My的對話框工程.建立一個Edit控件ID=IDC_EDIT1.建一個新類名為CMyProtectEdit,派生于CEdit.
            MyDlg.cpp中聲明全局變量:BOOL g_bIdentity;
            BOOL g_bIdentity;

            MyProtecEdit.cpp:
            extern BOOL g_bIdentity;

            響應CMyProtectEditDefWindowProc函數:
            LRESULT CMyProtectEdit::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
            {
            // TODO: Add your specialized code here and/or call the base class
            // Edit的內容獲取必須通過以下兩個消息之一,不對其采用默認的處理:
            if(( message == WM_GETTEXT) || ( message == EM_GETLINE))
            { //檢查是否為合法
            if(!g_bIdentity)
            { //非法獲取,顯示非法信息
            AfxMessageBox(_T("不能讓你看我的密碼,:( !"));
            return 0;
            )
            g_bIdentity = FALSE;//合法獲取
            }

            return CEdit::DefWindowProc(message, wParam, lParam);
            }

            然后在MyDlg.cpp
            void CMyDlg::DoDataExchange(CDataExchange* pDX)
            {
            CDialog::DoDataExchange(pDX);
            //{{AFX_DATA_MAP(CGetPasswordDlg)
            // NOTE: the ClassWizard will add DDX and DDV calls here
            if( pDX->m_bSaveAndValidate)
            {
            g_bIdentity = TRUE;
            }
            //}}AFX_DATA_MAP
            }
            即可.找個程序(盜取)的試試.

            3.如何在編輯控件中以追加的方式添入字符?

            [問題提出]
            SetDlgItemText可以向Edit控件中輸入字符,發送更新的消息也可是Edit控件顯示與其關聯的變量的值,但若是向已有的Edit字符后追加字符,該如何做?
            [程序實現]
            建立名為My的對話框工程,添加一個Edit和一個Button控件.EditID=IDC_EDIT1,ButtonID=IDC_BUTTON1.建立和IDC_BUTTON1的響應函數:OnButton1()
            void CMyDlg::OnButton1()
            {
            CString pText="你好";
            CEdit *m_Edit=(CEdit *)GetDlgItem(IDC_EDIT1);
            int nLen=m_Edit->GetWindowTextLength();
            m_Edit->SetFocus();
            m_Edit->SetSel(nLen, nLen);
            m_Edit->ReplaceSel(pText);
            }
            Edit控件中輸入字符,想追加時按IDC_BUTTON1按鈕.看看效果.

            4.怎樣實現3D效果?

            在對話框中怎樣實現EditListboxes控件的3D效果?(環境95/NT VC5.0)

            1). 使用帶WS_EX_CLIENTEDGE標志的::CreateWindowEx來替換::CreateWindow 或者用CWnd::CreateEx替換CWnd::Create.
            2).在建立控件之后,調用ModifyStyleEx(0, WS_EX_CLIENTEDGE).

            5.RichEdit加入后,對話框打不開

            Dialog(FormView中打開)中加入CRichEdit控件后,這個dialog 為什么打不開如何處理?
            [解決方法]
            在函數:InitInstance的第一句加入AfxInitRichEdit();

            6.Richedit設置背景圖片的辦法

            1:繼續CRichEditCtrl::OnEraseBkgnd(CDC* pDC)消息事件中,給Richedit控件繪制上背景圖片:m_bmpBackground.DrawDIB(pDC, 0, 0, rc.Width(), rc.Height());當然也可以通過subclass richedit window之后,在回調函數中處理WM_ERASEBKGND消息。

            2:設置了Richedit控件的透明屬性;

            3:依照kenwhale所說的,HookGDI32.DLL中的ExtTextOut函數,將RichEdittext-output options去除ETO_OPAQUE style

            。綜上所述,即可實現RichEdit控件的背景圖片效果。

            據此,我還實現了RichEdit控件背景繪制AVI動畫效果。

            7.改變編輯框的背景色(WM_CTLCOLOR消息)

            首先要明白:WM_CTLCOLOR是一個由控制(Control)發送給它父窗口的通知消息(Notification message)

            實現步驟:
            生成一個標準的單文檔應用程序框架,假設應用程序的名稱為Color。我將利用它的About對話框做示范。在About dialog中添加兩個Edit control,設定其IDIDC_EDIT1IDC_EDIT2

            第一種方法(對應于IDC_EDIT1): 按照標準的Windows編程,由其父窗口的消息處理函數負責處理WM_CTLCOLOR消息。

            1. CAboutDlg中添加一個數據成員:HBRUSH m_brMine;
            2. 利用向導映射AboutDlgWM_CTLCOLOR消息,產生函數:HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
            pDCAboutDlg的設備上下文,pWndAboutDlg中發送該消息的control指針,nCtlColorControl的類型編碼。對其進行如下修改:

            HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
            {
            if ((pWnd->GetDlgCtrlID() == IDC_EDIT1) && (nCtlColor == CTLCOLOR_EDIT))
            {
            COLORREF clr = RGB(255,0,0);
            pDC->SetTextColor(clr); //設置紅色的文本
            clr = RGB(0,0,0);
            pDC->SetBkColor(clr); //設置黑色的背景
            m_brMine = ::CreateSolidBrush(clr);
            return m_brMine; //作為約定,返回背景色對應的刷子句柄
            }
            else
            {
            HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
            return hbr;
            }
            }

            第二種方法(對應于IDC_EDIT2):
            利用MFC 4.0的新特性: Message reflection

            1.利用向導添加一個新的類:CColorEdit,基類為CEdit;
            2.CColorEdit中添加一個數據成員: HBRUSH m_bkBrush;
            3.利用向導映射CColorEdit"=WM_CTLCOLOR"消息,產生函數:

            HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor);

            對其進行如下修改:

            HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)
            {
            COLORREF clr = RGB(0,0,0);
            pDC->SetTextColor(clr); //設置黑色的文本
            clr = RGB(255,0,0);
            pDC->SetBkColor(clr); //設置紅色的背景
            m_bkBrush = ::CreateSolidBrush(clr);
            return m_bkBrush; //作為約定,返回背景色對應的刷子句柄
            }

            4.利用向導為IDC_EDIT2生成一個數據成員CColorEdit m_coloredit;
            5.在定義CAboutDlgcolor.cpp文件中加入:#include "coloredit.h"

            posted on 2008-04-02 18:51 wrh 閱讀(1243) 評論(0)  編輯 收藏 引用

            導航

            <2008年4月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            統計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            99久久精品免费看国产一区二区三区 | 久久人人青草97香蕉| 伊人久久亚洲综合影院| 一本大道久久东京热无码AV| 久久久久se色偷偷亚洲精品av| 狼狼综合久久久久综合网| 国产精品美女久久久久| 久久亚洲欧洲国产综合| 婷婷伊人久久大香线蕉AV| 国产精品午夜久久| 久久狠狠高潮亚洲精品| 久久99亚洲综合精品首页 | 久久久一本精品99久久精品88| 亚洲一区中文字幕久久| 久久这里的只有是精品23| 国产精品一久久香蕉产线看 | 国产精品禁18久久久夂久| 久久亚洲国产精品五月天婷| 久久精品国产亚洲av影院| 亚洲伊人久久成综合人影院| 情人伊人久久综合亚洲| 欧美黑人又粗又大久久久| 久久久久99精品成人片| 国产成人99久久亚洲综合精品| 色播久久人人爽人人爽人人片AV| 国产亚州精品女人久久久久久| 久久亚洲欧美国产精品| 狠狠色狠狠色综合久久| 国产精品亚洲综合久久| 亚洲国产精品狼友中文久久久| 精品久久久久久无码中文野结衣 | 97精品依人久久久大香线蕉97| 久久青青草原精品国产不卡| 久久99精品免费一区二区| 日本久久久久久中文字幕| 国产精品久久国产精品99盘| 久久99国产综合精品| 国产精品久久国产精品99盘| 久久综合久久综合九色| 伊人久久免费视频| 久久美女网站免费|