学习MFC
来源:互联网 发布:apache bench windows 编辑:程序博客网 时间:2024/04/28 04:18
1、子窗口类中调用父窗口类中的成员函数:
CParentDlg *p;
p = (CParent *)GetParent();
p->func();
2、子窗口在关闭时通知父窗口刷新;
刷新工作交给父窗口自己做,在父窗口中:
{
CFriendDlg dlg;
dlg.domodal();
refreshlist(); // 刷新好友列表
}
什么?子窗口是非模态窗口?那就发消息:
在父窗口中自定义消息#define WM_MSG WM_USER+0x01
添加消息处理函数 LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
加入消息映射ON_MESSAGE(WM_MSG, OnMyMessage)
在OnMyMessage中刷新好友
在子窗口中,给父窗口发消息SendMessage(GetParent(), WM_MSG, 0, 0)
3、改变窗口控件的颜色:
在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:
afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor);
参数nCtlColor用于指定控件的类型,可以是:
.CTLCOLOR_BTN 按钮控件
.CTLCOLOR_DLG 对话框
.CTLCOLOR_EDIT 编辑框
.CTLCOLOR_LISTBOX 列表控件
.CTLCOLOR_MSGBOX 消息控件
.CTLCOLOR_SCROLLBAR 滚动条控件
.CTLCOLOR_STATIC 静态控件
[程序实现]
假设你已有了名为My的对话框工程.你有了一个STATIC的控件,ID为IDC_STATIC1.
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if (nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(255,0,0)); //字体颜色
pDC->SetBkColor(RGB(0, 0, 255)); //字体背景色
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
如果要指定某个特定控件可以这样写:ID为IDC_STATIC1
if (pWnd->GetDlgCtrlID()==IDC_STATIC1)
{
pDC->SetTextColor(RGB(255,0,0)); //设置字体颜色
pDC->SetBkMode(TRANSPARENT); //设置字体背景为透明
// TODO: Return a different brush if the default is not desired
return (HBRUSH)::GetStockObject(BLACK_BRUSH); // 设置背景色
}
else
return hbr;
【注】
BLACK_BRUSH:黑色
WHITE_BRUSH:白色
GRAY_BRUSH:灰色
NULL_BRUSH:透明
HOLLOW_BRUSH :透明
4、设置鼠标的状态:
//设置鼠标的形状,这里主要设置当鼠标在某些静态控件上是让鼠标形状变成手形
BOOL CMy14032501Dlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
if (pWnd == GetDlgItem(IDC_STATIC_DEVELOP_LANGUAGE) || pWnd == GetDlgItem(IDC_STATIC_DEVELOP_ENVIRONMENT)
|| pWnd == GetDlgItem(IDC_STATIC_CODE_CLASSIFY))
{
HCURSOR hCursor = ::LoadCursor(NULL, MAKEINTRESOURCE(32649)); //加载手形光标
::SetCursor(hCursor);
return TRUE;
}
}
5、什么情况下才需要用ReleaseDC()来释放DC?
创建的DC都不需要,当且仅当你从window用GetDC之类的函数获得一个dc指针时才需要;
6、GDI对象的创建的释放:
MFC类对象在析构时都会自动释放资源,不需要自己处理。只是当对象正在被使用的时候,例如对象被选入了某个DC中,此时对象是不能删除的,所以才会造成泄露。
在使用SelectObject的时候,要保存其返回值,在用完之后再次调用SelectObject,选入上次的返回值。
- 学习MFC
- MFC学习
- MFC学习
- MFC学习
- 学习MFC
- MFC 学习
- MFC学习
- MFC学习
- MFC学习
- mfc学习
- 学习MFC
- MFC学习
- MFC学习
- MFC学习
- MFC学习
- MFC 学习
- MFC学习
- MFC学习
- LAMP 系统性能调优,第 1 部分: 理解 LAMP 架构(原创整理来自IBM)
- UVALive 6609(Minimal Subarray Length)维护递增序列|RMQ
- python十个项目之----画幅好画
- linux 入门简单命令
- MII/MDIO接口详解
- 学习MFC
- 关于button
- inflate函数及其使用例子 笔记
- Java利用httpasyncclient进行异步HTTP请求
- ubuntu12.04的NFS配置
- 柱状图中找到最大的矩形
- Ubuntu文件系统
- Python爬虫抓取网页图片
- 开发板的串口的作用