国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
VC++改變背景顏色的類___CMyEdit類

在VC中,編輯框的顏色改變起來似乎很難,MFC的CEdit類后沒有提供可改變顏色的函數(shù)。在本文中,我將重載CEdit類,編寫一個可以改變背景顏色的類CMyEdit類,將編輯框的變量定義為CMyEdit類型來實現(xiàn)改變編輯框的背景顏色。


一、構建應用程序
  新建一個基于對話框基礎的程序ChangeEdit,然后在對話框的摸板上刪除靜態(tài)文本框,添加三個編輯框。
二、打造自己的CMyEdit類

  1.添加CMyEdit類

  生成好應用程序之后,我們可以利用類向導生成器添加一個新類。

將新類命名為CMyEdit,繼承自CEdit類。

  2.添加成員變量
  類生成好后,再添加成員變量,在此,我們需要添加三個私有類型的成員變量,COLORREF變量保存當前顏色,CBrush 變量保存改變后的刷子顏色,CString 變量保存當前編輯框的內(nèi)容。如下所示。

private:
CBrush m_Brush;
CString m_Text;
COLORREF m_BackColor;

  3.添加成員函數(shù)
  1)添加兩個公有類型的成員函數(shù):

public:
void SetControlFocus();
void SetBkGrndColor();

其定義如下:

void CMyEdit::SetControlFocus()
{
//將變量m_BackColor的值設為黃色
m_BackColor = RGB(255,255,0);
}

void CMyEdit::SetBkGrndColor()
{
// 刪除舊的刷子
m_Brush.DeleteObject();

//創(chuàng)建一個m_BackColor顏色的刷子
m_Brush.CreateSolidBrush(m_BackColor);
CDC* pDC = GetDC();

//設置文字顯示模式,OPAQUE為獨占模式
pDC->SetBkMode(OPAQUE);

//設置文字的背景顏色
pDC->SetBkColor(m_BackColor);

//選擇刷子
pDC->SelectObject(&m_Brush);
CRect rc;
GetClientRect(&rc);
ScreenToClient(&rc);

//繪制一個矩形
pDC->Rectangle(0, 0, rc.Width(), rc.Height());

//設置文本顏色
pDC->SetTextColor(RGB(0, 0, 0,));

//輸出文本
pDC->TextOut(2, 2, m_Text.GetBuffer(m_Text.GetLength()));


}

  2)重載虛擬函數(shù)OnChildNotify():
  將OnChildNotify()函數(shù)的定義為如下形式:

BOOL CMyEdit::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult)
{
// We only want to handle WM_CTLCOLOREDIT messages - 32 bit only
//如果消息為WM_CTLCOLOREDIT,則返回基類的OnChildNotify函數(shù)
if (message != WM_CTLCOLOREDIT)
{
return CEdit::OnChildNotify(message, wParam, lParam, pLResult);
}
HDC hdcChild = (HDC)wParam;

//設置文字顏色為黑色,也可以修改為其他顏色
SetTextColor(hdcChild, RGB(0,0,0));

//設置背景顏色為m_BackColor顏色
SetBkColor(hdcChild, m_BackColor);
return TRUE;
}

  3)添加三個windows消息處理函數(shù):ON_WM_SETFOCUS、ON_WM_KILLFOCUS、ON_WM_PAINT,主要是用來處理編輯框獲得焦點和失去焦點的顏色改變效果。

  將這三個函數(shù)定義為如下形式:

//當編輯框獲得焦點時改變背景顏色為黃色
void CMyEdit::OnSetFocus(CWnd* pOldWnd)
{
CEdit::OnSetFocus(pOldWnd);

m_BackColor = RGB(255,255,0);
Invalidate(FALSE);
}

//當編輯框失去焦點時改變背景顏色為白色
void CMyEdit::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd);

//設置背景顏色為白色,也可以設為其他顏色
m_BackColor = RGB(255,255,255);

Invalidate(FALSE);
}

//重畫編輯框
void CMyEdit::OnPaint()
{
CPaintDC dc(this);

// TODO: Add your message handler code here

GetWindowText(m_Text);
SetBkGrndColor();

//不調(diào)用CEdit::OnPaint()
}

4.完善構造和析構函數(shù)
  通過以上的工作,我們作好了CMyEdit類的主體工作,當然,還需要在類的構造函數(shù)中設置編輯框的初始顏色信息和刷子信息。在析構函數(shù)中刪除已經(jīng)創(chuàng)建的刷子。如下所示:
CMyEdit::CMyEdit()
{
m_BackColor = RGB(255,255,255);
m_Brush.CreateSolidBrush(m_BackColor);
}

CMyEdit::~CMyEdit()
{
m_Brush.DeleteObject();
}

  這樣,我們便打造完了自己的CMyEdit類,然后直接在前面生成的應用程序中調(diào)用即可。

三、繼承CMyEdit類
  現(xiàn)在,我又回到最開始生成的應用程序中,前面已經(jīng)添加了三個編輯框,這里我利用ClassWizard來為三個編輯框添加成員變量,分別為這三個編輯框添加一個控制(control)類型的成員變量,特別注意的是繼承的基類選擇剛才做好的CMyEdit類。
  上面的工作全部做完之后編譯運行,你會發(fā)現(xiàn)在主程序中不用寫一句代碼便可改變編輯框的顏色,當編輯框獲得輸入焦點時,編輯框變?yōu)辄S色,失去輸入焦點時變?yōu)榘咨! ?/p>

這里介紹的方法還有更多可以改進的地方,我主要是給大家提供一種思路,希望能起到拋磚引玉的作用。有興趣的話不妨試試。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
深度剖析消息反射機制
編程中國 - 積累的VC編程小技巧之編輯框
MFC限制Edit控件只輸入數(shù)字、小數(shù)點及失去焦點
Visual C .NET編程講座之三(5)
網(wǎng)上收集的關于static text文字修改顏色和字體的解決辦法
vc 調(diào)色板講解和編程
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服