亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

新舊MFC版本實現CEdit透明的2種方法的實例代碼

2020-01-26 16:20:55
字體:
來源:轉載
供稿:網友

  MFC 4.2(Visual Studio 6)實現起來很方便,只需要在對話框類下處理WM_CTLCOLOR消息,然后以下代碼即可:

復制代碼 代碼如下:

HBRUSH CAlphaEditboxDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO: Change any attributes of the DC here
    pDC->SetBkMode(TRANSPARENT);
    hbr=(HBRUSH)GetStockObject(HOLLOW_BRUSH);
    // TODO: Return a different brush if the default is not desired
    return hbr;
}

 然后在編輯控件的相關事件里調用一下Invalidate。

復制代碼 代碼如下:

void CAlphaEditboxDlg::OnKillfocusEditkey() 
{
    // TODO: Add your control notification handler code here
    Invalidate();
}

void CAlphaEditboxDlg::OnKillfocusEditmessage() 
{
    // TODO: Add your control notification handler code here
    Invalidate();
}

void CAlphaEditboxDlg::OnKillfocusEditpath() 
{
    // TODO: Add your control notification handler code here
    Invalidate();
}

  不要忘了,如果刪除字符,要重繪一下背景哦。這里只羅列了一部分。

  新版的MFC可謂相當麻煩,因為把背景設為CLR_NONE或者畫刷設為HOLLOW_BRUSH,微軟會默認會制黑色背景,這一點,微軟真是倒退了。廢話少說了,編輯控件子類化無可避免了,一定要處理WM_PAINT、WM_CHAR、WM_LBUTTONDOWN、WM_LBUTTONUP這幾個消息。如果你想去掉編輯控制自帶的邊框,還得處理WM_NCPAINT消息,不過這里什么代碼都不寫,目的是為避免執行默認的CDialogEx::OnNcPaint()方法給畫上邊框。下面代碼實現基本的透明效果,正常輸入沒問題,如果你想要實現刪除、選中與取消選中等功能,請追加處理WM_LBUTTONDOWN、WM_LBUTTONUP消息。

復制代碼 代碼如下:

//////////////////////////////////////////////////////////////////////////
//繪制窗口。
//////////////////////////////////////////////////////////////////////////
void CMyEdit::OnPaint()
{
    PAINTSTRUCT ps;
    TEXTMETRIC tm;
    int nSelStart=0,nSelEnd=0,nDrawStart=0,nDrawLen=0,nTxtLen=0;
    RECT r;
    CBitmap b;
    LPTSTR sz=(LPTSTR)calloc(1024,sizeof(TCHAR));
    CPaintDC* d2=(CPaintDC*)BeginPaint(&ps);
    CDC d1;
    CFont f;
    CWnd* p=GetParent();
    nTxtLen=GetWindowText(sz,1024);
    b.LoadBitmap(IDB_BITMAP1);
    d1.CreateCompatibleDC(p->GetDC());
    GetWindowRect(&r);
    p->ScreenToClient(&r);
    d1.SelectObject(b);
    d2->BitBlt(0,0,r.right-r.left,r.bottom-r.top,&d1,r.left,r.top,SRCCOPY);
    f.CreateFontIndirect(&m_lf);
    d2->SelectObject(f);
    d2->SetBkMode(TRANSPARENT);
    d2->GetTextMetrics(&tm);
    GetSel(nSelStart,nSelEnd);
    if (r.right-r.left<nTxtLen*tm.tmAveCharWidth)
    {
        nDrawStart=0-tm.tmAveCharWidth*nSelStart;
        nDrawLen=(r.right-r.left)/tm.tmAveCharWidth;
    }
    else
    {
        nDrawStart=0;
        nDrawLen=nTxtLen;
    }
    d2->TextOut(nDrawStart,3,sz,nDrawLen);
    d2->SelectObject(GetStockObject(NULL_BRUSH));
    d2->SelectObject(CreatePen(PS_DOT,1,RGB(255,0,0)));
    d2->Rectangle(0,0,r.right-r.left,r.bottom-r.top);
    POINT pt;
    pt=GetCaretPos();
    pt.x=nDrawLen*tm.tmAveCharWidth;
    SetCaretPos(pt);
    delete sz;
    EndPaint(&ps);
}

//////////////////////////////////////////////////////////////////////////
//暫不處理粘滯按鍵和功能鍵這2種情況。
//////////////////////////////////////////////////////////////////////////
void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    TEXTMETRIC tm;
    int nSelStart=0,nSelEnd=0,nDrawStart=0,nDrawLen=0,nTxtLen=0;
    RECT r;
    CBitmap b;
    LPTSTR sz=(LPTSTR)calloc(1024,sizeof(TCHAR));
    LPTSTR input=(LPTSTR)calloc(1024,sizeof(TCHAR));
    CClientDC d2(this);
    CDC d1;
    CFont f;
    CWnd* p=GetParent();
    nTxtLen=GetWindowText(sz,1024);
    wsprintf(input,L"%c",nChar);
    lstrcat(sz,input);
    SetWindowText(sz);
    b.LoadBitmap(IDB_BITMAP1);
    d1.CreateCompatibleDC(p->GetDC());
    GetWindowRect(&r);
    p->ScreenToClient(&r);
    d1.SelectObject(b);
    d2.BitBlt(0,0,r.right-r.left,r.bottom-r.top,&d1,r.left,r.top,SRCCOPY);
    f.CreateFontIndirect(&m_lf);
    d2.SelectObject(f);
    d2.SetBkMode(TRANSPARENT);
    d2.GetTextMetrics(&tm);
    GetSel(nSelStart,nSelEnd);
    if (r.right-r.left<nTxtLen*tm.tmAveCharWidth)
    {
        nDrawStart=0-tm.tmAveCharWidth*nSelStart;
        nDrawLen=(r.right-r.left)/tm.tmAveCharWidth;
    }
    else
    {
        nDrawStart=0;
        nDrawLen=nTxtLen;
    }
    d2.TextOut(nDrawStart,3,sz,nDrawLen);
    d2.SelectObject(GetStockObject(NULL_BRUSH));
    d2.SelectObject(CreatePen(PS_DOT,1,RGB(255,0,0)));
    d2.Rectangle(0,0,r.right-r.left,r.bottom-r.top);
    POINT pt;
    pt=GetCaretPos();
    pt.x=nDrawLen*tm.tmAveCharWidth;
    SetCaretPos(pt);
    delete sz;
    delete input;
    //CEdit::OnChar(nChar, nRepCnt, nFlags);
}

以上就是這些了,歡迎一起交流如何實現注釋中寫明的沒有實現有功能。我是菜鳥,大蝦請勿見笑。希望你能多多指點。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲黄页网在线观看| 亚洲精品动漫100p| 狠狠做深爱婷婷久久综合一区| 久久在线精品视频| 成人写真福利网| 668精品在线视频| 日韩精品久久久久久久玫瑰园| 国产色婷婷国产综合在线理论片a| 91免费的视频在线播放| 欧美极品美女电影一区| 亚洲影视中文字幕| 欧美精品一区二区三区国产精品| 91精品久久久久久综合乱菊| 国产精品日韩精品| 日韩一区二区久久久| 亚洲一区美女视频在线观看免费| 欧洲亚洲在线视频| 欧美午夜激情视频| 亚洲男人av电影| 亚洲免费视频在线观看| 亚洲精品日产aⅴ| 成人网在线免费观看| 亚洲人成伊人成综合网久久久| 精品国产一区二区三区四区在线观看| 亚洲第一国产精品| 全球成人中文在线| 最近2019中文免费高清视频观看www99| 国产精品第2页| 国产欧美 在线欧美| 欧美孕妇孕交黑巨大网站| 亚洲精品www久久久| 欧美电影在线观看| 原创国产精品91| 成人黄色在线观看| 精品久久久久久久久久久| 欧美激情a∨在线视频播放| 亚洲精品久久久久久久久久久久| 欧美国产日韩一区二区在线观看| 日韩在线观看网站| 欧美激情性做爰免费视频| 国产免费成人av| 国产精品自拍偷拍视频| 一区国产精品视频| 欧美国产日韩xxxxx| 亚洲天堂第二页| 国产成人中文字幕| 国内精品久久久久影院优| 不卡av在线播放| 亚洲视频在线视频| 国产美女久久精品| 亚洲成人黄色在线| 亚洲www在线| 久久中文字幕视频| 97久久久免费福利网址| 国产精品夫妻激情| 日韩美女写真福利在线观看| 亚洲欧美中文日韩在线| 欧美亚洲激情视频| 91视频8mav| 成人精品一区二区三区| 国产精品一区二区久久久| 日韩国产一区三区| 欧美激情图片区| 久久久av亚洲男天堂| 国产精品国产亚洲伊人久久| 久久99青青精品免费观看| 两个人的视频www国产精品| 亚洲欧洲一区二区三区在线观看| 日韩欧美中文字幕在线播放| 欧美日韩999| 成人激情视频小说免费下载| 9.1国产丝袜在线观看| 欧美日韩另类字幕中文| 国内免费精品永久在线视频| 久久亚洲精品毛片| 欧美多人爱爱视频网站| 91夜夜揉人人捏人人添红杏| 国产日韩精品在线观看| 亚洲国产精品电影在线观看| 日韩欧美一区二区三区久久| 日韩成人中文字幕在线观看| 中文字幕日韩视频| 日韩欧美精品网站| 欧洲亚洲免费在线| 51精品国产黑色丝袜高跟鞋| 欧美大成色www永久网站婷| 成人情趣片在线观看免费| 大胆欧美人体视频| 欧美中在线观看| 91亚洲国产精品| 欧美激情videoshd| 日韩国产精品视频| 亚洲美女又黄又爽在线观看| 91日韩在线播放| 97视频免费在线观看| 久久久久久久久网站| 久久精品国产亚洲| 国产一区二区三区丝袜| 性欧美在线看片a免费观看| 亚洲成年人在线播放| 久久天堂av综合合色| 欧美午夜性色大片在线观看| 91精品国产91久久| 97国产精品免费视频| 欧美极品少妇与黑人| 国产suv精品一区二区三区88区| 久久久国产精品一区| 精品视频在线观看日韩| 91av福利视频| 欧美福利小视频| 岛国av一区二区三区| 欧美专区日韩视频| 国产精品美女www| 亚洲女人天堂视频| 日韩视频―中文字幕| 在线视频国产日韩| 久久久久久久香蕉网| 精品国内自产拍在线观看| 国产精品∨欧美精品v日韩精品| 国产97人人超碰caoprom| 清纯唯美日韩制服另类| 欧美成在线视频| 亚洲精品久久久久中文字幕欢迎你| 国产精品久久久久久超碰| 日韩av在线免费观看一区| 国产精品亚洲激情| 亚洲一区二区三区sesese| 成人精品一区二区三区| 2019国产精品自在线拍国产不卡| 日韩精品视频在线观看网址| 亚洲国产成人爱av在线播放| 欧美性猛交丰臀xxxxx网站| 欧美成人黑人xx视频免费观看| 亚洲国产精品人久久电影| www.日韩系列| 国语自产精品视频在线看一大j8| 91精品国产网站| 久久精品夜夜夜夜夜久久| 国产福利精品av综合导导航| 久久久久久亚洲精品| 性色av一区二区三区在线观看| 亚洲第一页自拍| 国产91精品高潮白浆喷水| 国产欧美日韩精品丝袜高跟鞋| 亚洲另类激情图| 日韩免费观看视频| 久久久视频在线| 一区二区三区国产在线观看| 国产成人精品在线视频| 中文字幕日韩欧美在线视频| 国产精品一区二区三区久久| 国产偷亚洲偷欧美偷精品| 亚洲aⅴ日韩av电影在线观看| 琪琪第一精品导航| 欧美午夜激情在线| 夜夜躁日日躁狠狠久久88av| 欧美激情久久久久久| 91美女片黄在线观看游戏| 久久精品成人欧美大片古装| 91精品啪在线观看麻豆免费| 欧美天堂在线观看| 国产69精品久久久| 亚洲一区二区三区香蕉| 国产日本欧美一区|