VCdog(狗)编程网

vc狗编程网希望你喜欢

博客园 首页 新随笔 联系 订阅 管理

做软件难免为自己写一些类之类的,那么怎么定制自己的开发类呢,下面我给大家说一说吧 ,

    VC提供了一个类的向导程序,在那里我们可以快速建立自己的扩展类,这里有2中方式可以打开类的向导

              第一:直接快捷键CTRL+W

        第二:insert->NewClass

说明CTRL+w 弹出的是类向导,你还的点击右边的“AddClass…”->”New”这个按钮,这时出现如下图,在这里你就可以添加扩展类,如下图

这里我们来举个例子,我们添加一个CEDIT的扩展类,如下图

在这个里面我们就可以任意改变文本框的功能和效果,你想要怎么样就怎么样, 你可以为所欲为,只要你有想象力 ,下面我们改变一下,例如我们打算把编辑框的背景色改变(当然了还有其他的方法也是可以实现的),这些代码的添加几乎全是在我们定制的扩展类中添加,(下面是我节选的一段代码,大家可以研究一下)

步骤一:在CEditEx中添私有成员变量

CBrush m_EdtBrush;//编辑框改变后刷子的颜色
CString m_str;//编辑框的文本内容
COLORREF m_CurBackColor;// 编辑框当前的颜色

步骤二:添加成员函数
  添加两个公有类型的成员函数:目的为了提供一个接口

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

其定义如下:

void CEditEx::SetControlFocus()
{
//将变量m_CurBackColor的值设为黄色
 m_CurBackColor = RGB(255,255,0);
}

void CEditEx::SetBkGrndColor()
{
// 删除旧的刷子
m_EdtBrush.DeleteObject();

//创建一个m_CurBackColor颜色的刷子
m_EdtBrush.CreateSolidBrush(m_CurBackColor);
CDC* pDC = GetDC();

//设置文字显示模式,OPAQUE为独占模式
pDC->SetBkMode(OPAQUE);

//设置文字的背景颜色
pDC->SetBkColor(m_CurBackColor);

//选择刷子
pDC->SelectObject(&m_EdtBrush);
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_str.GetBuffer(m_str.GetLength()));


}

  2)重载虚拟函数OnChildNotify():
  将OnChildNotify()函数的定义为如下形式:

BOOL CEditEx::OnChildNotify(UINT message, WPARAM wParam,LPARAM lParam, LRESULT* pLResult)
{
// We only want to handle WM_CTLCOLOREDIT messages - 32 bit only
//如果消息为WM_CTLCOLOREDIT,则返回基类的OnChildNotify函数
if (message != WM_CTLCOLOREDIT)
{
return CEdit::OnChildNotify(message, wParam, lParam, pLResult);
}
HDC hdcChild = (HDC)wParam;

//设置文字颜色为黑色,也可以修改为其他颜色
SetTextColor(hdcChild, RGB(0,0,0));

//设置背景颜色为m_CurBackColor颜色
SetBkColor(hdcChild, m_CurBackColor);
return TRUE;
}

  3)添加三个windows消息处理函数:ON_WM_SETFOCUS、ON_WM_KILLFOCUS、ON_WM_PAINT,主要是用 来处理编辑框获得焦点和失去焦点的颜色改变效果。

  将这三个函数定义为如下形式:

//当编辑框获得焦点时改变背景颜色为黄色
void CEditEx::OnSetFocus(CWnd* pOldWnd)
{
CEdit::OnSetFocus(pOldWnd);

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

//当编辑框失去焦点时改变背景颜色为白色
void CEditEx::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd);

//设置背景颜色为白色,也可以设为其他颜色
m_CurBackColor = RGB(255,255,255);

Invalidate(FALSE);
}

//重画编辑框
void CEditEx::OnPaint()
{
CPaintDC dc(this);

// TODO: Add your message handler code here

GetWindowText(m_str);
SetBkGrndColor();

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

4.完善构造和析构函数
  通过以上的工作,我们作好了CEditEx类的主体工作,当然,还需要在类的构造函数中设置编辑框的初始颜色信息和刷子信息。在析构函数中删除已经创建的刷子。如下所示:
CEditEx::CEditEx()
{
m_CurBackColor = RGB(255,255,255);
m_EdtBrush.CreateSolidBrush(m_CurBackColor);
}

CEditEx::~CEditEx()
{
m_EdtBrush.DeleteObject();
}

这样,我们便打造完了自己的CEditEx类,然后直接在前面生成的应用程序中调用即可。

注,你可以改动任何一个控件,打造你想要的结果,虽然有点麻烦但是很灵活,呵呵 这也许就是VC的功效吧 ,希望那些学习VC的朋友不要气馁,坚持,坚持,再坚持就是胜利

转 vc狗编程网 (www.vcdog.com)