2024年2月19日发(作者:)

1. 无标题栏和边框的对话框

Border 属性改为 None

Title bar属性改为 False

2. 对话框添加OnInitDialog函数

OnInitDialog 在vs2010中实现为虚函数, 所以在“项目”-> “类向导”-> “虚函数”->找到对应虚函数添加即可,就这么简单。

3. 移动无标题栏的对话框

拖动无标题窗口时,欺骗WINDOW在鼠标点下是像WINDOW发送一个鼠标选中WINDOW标题栏的消息!

添加鼠标左键消息。

void CMyPlayerDlg::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

//使窗口可以拖动

PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM (point.x, point.y));

CDialog::OnLButtonDown(nFlags, point);

}

在OnLButtonDown的鼠标响应消息添加红色部分代码!

WM_NCLBUTTONDOWN 鼠标选中非客户区域(标题栏)

HTCAPTION 鼠标选中了标题栏

MAKELPARAM (point.x, point.y)) 返回一个LPARAM的值

PostMessage函数功能:

该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。消息队列里的消息通过调用GetMessage和PeekMessage取得。原型与参数如下:

函数原型:BOOL PostMessage(UINT Msg,WPARAM wParam,LPARAM lParam);

参数说明:

Msg:指定被寄送的消息。

wParam:指定附加的消息特定的信息。

IParam:指定附加的消息特定的信息。

返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。

4. MFC设置对话框背景颜色

方法一:

重载OnPaint(),即WM_PAINT消息。

CRect rect;

CPaintDC dc(this);

GetClientRect(rect);

lidRect(rect,RGB(0,255,0)); //设置为绿色背景

方法二:

重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor), 即WM_CTLCOLOR消息。

HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: 在此更改 DC 的任何属性

if(nCtlColor==CTLCOLOR_DLG) //更改对话框背景色

{

pDC->SetTextColor(RGB(0,0,0));

pDC->SetBkColor(RGB(166,254,1));

HBRUSH b=CreateSolidBrush(RGB(166,254,1));

return b;

}

else if(nCtlColor==CTLCOLOR_STATIC) //更改静态文本颜色

{

pDC->SetTextColor(RGB(0,0,0)); //设置文本颜色

//pDC->SetBkColor(RGB(166,254,1)); //需要指定背景色的时候用,此时不用

pDC->SetBkMode(TRANSPARENT); //设置背景透明

HBRUSH b=CreateSolidBrush(RGB(166,254,1)); //更改静态文本

return b;

}

else if(nCtlColor==CTLCOLOR_EDIT) //更改编辑框

{

pDC->SetTextColor(RGB(0,0,0)); //设置文本颜色

pDC->SetBkMode(TRANSPARENT); //设置背景透明

HBRUSH b=CreateSolidBrush(RGB(165,254,236)); //更改颜色

return b;

}

else if(nCtlColor==CTLCOLOR_BTN) //更改按钮背景色

{

HBRUSH b=CreateSolidBrush(RGB(135, 206, 235));

return b;

}

if(IDC_CHECK1==pWnd->GetDlgCtrlID()) //更改按钮背景色

{

HBRUSH b=CreateSolidBrush(RGB(135, 206, 235));

return b;

}

if(IDC_RADIO1==pWnd->GetDlgCtrlID())

{

HBRUSH b=CreateSolidBrush(RGB(135, 206, 235));

return b;

}

// TODO: 如果默认的不是所需画笔,则返回另一个画笔

return hbr;

}

可以根据不同的控件类型返回不同的画刷,来实现不同控件颜色的设置

CTLCOLOR_BTN 按钮控件

CTLCOLOR_DLG 对话框

CTLCOLOR_EDIT 编辑框

CTLCOLOR_LISTBOX 列表控件

CTLCOLOR_MSGBOX 消息控件

CTLCOLOR_SCROLLBAR 滚动条控件

CTLCOLOR_STATIC 静态控件

这里大家要注意,OnCtlColor能改变Static等子控件的颜色,对于Button必须设置其属性Owner Draw为True,才能改变Button按钮背景色(CButton 文本的字体颜色并不能通过SetBkColor来改变,需要自己重绘CButton,在DrawItem中进行实现。

编辑框的Border属于需要设置为False。

5. 无标题栏对话框在任务栏显示标题

点击你要添加的那个类,右击属性,在编译器右边会出现菜单栏,点击一个叫“消息”的按钮,找到下面的WM_CREATE,然后点击点击,添加OnCreate函数。

int CtestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if (CDialog::OnCreate(lpCreateStruct) == -1)

return -1;

// TODO: Add your specialized creation code here

this->SetWindowText(_T("test"));//显示字符:test

return 0;

}

6. Group Box控件修改颜色

Group Box控件颜色不能通过WM_CTLCOLOR消息设置,只能通过自绘完成。需要使用和GroupBox.h两个文件。具体步骤如下:

1. 在工程中添加和GroupBox.h文件,则在类视图中可以看到CGroupBox类,如下图所示:

2. 修改Group Box的ID

3.

在xxxxxxDlg.h文件的CxxxxxxDlg类的定义中添加:CGroupBox m_box1,m_box2,m_box3,m_box4;再在xxxxxxDlg.c文件的void CData_SampleDlg::DoDataExchange(CDataExchange* pDX)函数中添加Group Box控件和CGroupBox对象的关联,即添加DDX_Control(pDX, IDC_STATIC1,m_box1)函数。代码如下:

void CData_SampleDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Control(pDX, IDC_STATIC1,m_box1);

DDX_Control(pDX, IDC_STATIC2,m_box2);

DDX_Control(pDX, IDC_STATIC3,m_box3);

DDX_Control(pDX, IDC_STATIC4,m_box4);

}

4. 在文件的void CGroupBox::OnPaint()函数中修改线条颜色和字体。具体如下:

void CGroupBox::OnPaint()

{

CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here

CString str;

this->GetWindowText(str);

CRect rc;

this->GetClientRect(rc);

int SIZE = 5;

CRect rc2(+SIZE, +15, -SIZE, -SIZE);

// CBrush br(RGB(0, 0, 0));

// Object(&br);

// ct(&rc, &br);

// TRACE("---------------n");

// Do not call CStatic::OnPaint() for painting messages

CBrush br2(RGB(255, 255, 0));

Object(&br2);

ect(&rc2, &br2);

//框颜色

CFont font;

PointFont(100, _T("宋体"));

Object(&font);

olor(RGB(135, 206, 235));

tColor(RGB(0, 0, 0));

t(+10, +10, str);

Object();

//文字字体

//文字背景颜色

//文字颜色

}

实现的效果如下图所示:

7. 按钮的美化(CButtonST)

使用CButtonST重绘。