从CWnd派生一个类CMyWnd,重载它的OnPaint函数,以便画上自己想要的东西。
但是在一个对话框测试程序中,添加成员变量CMyWnd myWnd; 在测试程序的OnInitDialog()中myWnd.Create(::AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW, ::LoadCursor(NULL, IDC_ARROW), (HBRUSH) ::GetStockObject(WHITE_BRUSH)))创建了,并myWnd.ShowWindow(WS_SHOW)
在OnPaint里
void FireTree::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CRect rc;
GetWindowRect(&rc);
CBrush brush;
brush.CreateSolidBrush(RGB(255, 0, 0));
dc.FillRect(&rc, &brush);
dc.LineTo(100, 100);
dc.TextOut(0, 0, "Hello");
dc.DrawText("你好", CRect(0, 50, 100, 80), DT_CENTER | DT_VCENTER);
// Do not call CWnd::OnPaint() for painting messages
}
画的线和文字都显示出来了,但是为什么用FillRect把背景填成RGB(255, 0, 0)却没有效果呢?而且对话框的背景也不是(HBRUSH) ::GetStockObject(WHITE_BRUSH)设定的白色,而是对话框原本的灰白色的背景,想不明白,请各位指教。
但是在一个对话框测试程序中,添加成员变量CMyWnd myWnd; 在测试程序的OnInitDialog()中myWnd.Create(::AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW, ::LoadCursor(NULL, IDC_ARROW), (HBRUSH) ::GetStockObject(WHITE_BRUSH)))创建了,并myWnd.ShowWindow(WS_SHOW)
在OnPaint里
void FireTree::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CRect rc;
GetWindowRect(&rc);
CBrush brush;
brush.CreateSolidBrush(RGB(255, 0, 0));
dc.FillRect(&rc, &brush);
dc.LineTo(100, 100);
dc.TextOut(0, 0, "Hello");
dc.DrawText("你好", CRect(0, 50, 100, 80), DT_CENTER | DT_VCENTER);
// Do not call CWnd::OnPaint() for painting messages
}
画的线和文字都显示出来了,但是为什么用FillRect把背景填成RGB(255, 0, 0)却没有效果呢?而且对话框的背景也不是(HBRUSH) ::GetStockObject(WHITE_BRUSH)设定的白色,而是对话框原本的灰白色的背景,想不明白,请各位指教。
解决方案 »
- COM调用问题
- 位图保存到按位图文件格式保存到buf中,也就是要跳过保存到磁盘文件再从磁盘文件读取buf中
- 如何将对话框的背景设置为BMP图形??
- 求教一个关于数据库int的问题
- 请问一个程序能打开的socket的最大数是多少?如何修改设置这个值?
- 声明消息响应函数时,放在 //{{AFX_MSG //}}AFX_MSG 和不放在其间,有什么不同?换言之,//{{AFX_MSG 是干什么用的?
- 树型目录控件为何不响应我的OnLButtonUp
- 我想实现这些功能谁给些提示:应该查哪方面的资料?
- 如何发送一个“Http://www.csdn.net/login.asp?user=1234”这样的请求?
- IOCP同一个链接上多次Send和Recv的问题
- (继续) 关于枚举系统中内核对象的一些问题
- vc i am back
HBRUSH FireTree::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetTextColor(RGB(0, 255, 0));
pDC->SetBkColor(RGB(0, 0, 0));
HBRUSH hbr = (HBRUSH)GetStockObject(WHITE_BRUSH);
return hbr;
}
不知道这样添加对不对?编译通过了,在这个函数里设置了断点,调试运行,窗口显示出来了,但是没有经过这个函数还是我哪里添加错了?
而你的Opaint函数是FireTree的
这都哪跟哪啊
if (!brush.CreateSolidBrush(RGB(255, 0, 0))
return;brush.UnrealizeObject();
dc->FillRect(client, &brush);
用完后记得deleteobject();看你代码没什么大问题。主要还是看firetree这个类是怎么定义的了。要是是cdiglog的派生类.在onpaint里面自绘,或者相应WM_CTLCOLOR或者ON_WM_ERASEBKGND改变背景色都是可以的。