欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
VC++改變背景顏色的類(lèi)___CMyEdit類(lèi)

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


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

  1.添加CMyEdit類(lèi)

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

將新類(lèi)命名為CMyEdit,繼承自CEdit類(lèi)。

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

private:
CBrush m_Brush;
CString m_Text;
COLORREF m_BackColor;

  3.添加成員函數
  1)添加兩個(gè)公有類(lèi)型的成員函數:

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

其定義如下:

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

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

//創(chuàng )建一個(gè)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);

//繪制一個(gè)矩形
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)重載虛擬函數OnChildNotify():
  將OnChildNotify()函數的定義為如下形式:

BOOL CMyEdit::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult)
{
// We only want to handle WM_CTLCOLOREDIT messages - 32 bit only
//如果消息為WM_CTLCOLOREDIT,則返回基類(lèi)的OnChildNotify函數
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)添加三個(gè)windows消息處理函數:ON_WM_SETFOCUS、ON_WM_KILLFOCUS、ON_WM_PAINT,主要是用來(lái)處理編輯框獲得焦點(diǎn)和失去焦點(diǎn)的顏色改變效果。

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

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

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

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

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

Invalidate(FALSE);
}

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

// TODO: Add your message handler code here

GetWindowText(m_Text);
SetBkGrndColor();

//不調用CEdit::OnPaint()
}

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

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

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

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

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

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

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久