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重绘。
发布评论