BOOL CV1Dlg::OnInitDialog()
{
...
m_PaintClient=false; //不画客户
m_PaintServer=false; //不画服务器
...
}void CV1Dlg::OnPaint()
{
if (IsIconic())
{
...
}
else
{
if (m_PaintClient) PaintClient();
if (m_PaintServer) PaintServer();
CDialog::OnPaint();
}
}void CV1Dlg::OnNewClient()
{
...
m_PaintClient=true; //画客户
Invalidate();
}void CV1Dlg::OnSetServerPara()
{
...
m_PaintServer=true; //画服务器
Invalidate();
}
void CV1Dlg::PaintClient()
{
CPaintDC dc(this);
RECT rect;
CDC *mdc= new CDC;
CBitmap *bitmap= new CBitmap;
GetClientRect (&rect);
mdc->CreateCompatibleDC(&dc);
bitmap->m_hObject = (HBITMAP)::LoadImage(NULL,"client.bmp",
IMAGE_BITMAP, 100,100, LR_LOADFROMFILE);
mdc->SelectObject(bitmap);
dc.BitBlt(250,100,200+100, 100+100, mdc, 0, 0, SRCCOPY);
}void CV1Dlg::PaintServer()
{
CPaintDC dc(this);
RECT rect;
CDC *mdc= new CDC;
CBitmap *bitmap= new CBitmap;
GetClientRect (&rect);
mdc->CreateCompatibleDC(&dc);
bitmap->m_hObject = (HBITMAP)::LoadImage(NULL,"server.bmp",
IMAGE_BITMAP, 60,100, LR_LOADFROMFILE);
mdc->SelectObject(bitmap);
dc.BitBlt(550,100,550+60, 100+100, mdc, 0, 0, SRCCOPY);
}第一次按服务器,服务器能够被画出来。然后按客户,客户也画出来了,但服务器没有了,以后再怎么按服务器它也画不出来, 这是怎么回事? 非常感谢
谢谢, 麻烦看下代码,我是在OnPaint里画的, 应该都会重画啊: void CV1Dlg::OnPaint()
{
if (IsIconic()) //不知道这个什么意思
{
...
}
else
{
if (m_PaintClient) PaintClient(); //我在OnPaint()里调用其他函数, 应该也算是
//在OnPaint() 里面画的吧
if (m_PaintServer) PaintServer(); CDialog::OnPaint(); }
}
void CV1Dlg::PaintClient()
{
CPaintDC dc(this);
...
}void CV1Dlg::PaintServer()
{
CPaintDC dc(this);
...
}
//在OnPaint() 里面画的吧
if (m_PaintServer) PaintServer();
/////////////////////////////////////////////////////
我上面想说的是你是否在PaintClient之后Invalidate了,俺认为应该在两个都Paint之后再Invalidate。
CBitmap *bitmap= new CBitmap; 每次都new一个,这肯定不对
mdc->CreateCompatibleDC(&dc);//这句只能用一次,这样就对了 只是这么一来 CPaintDC dc(this) 中的dc也要作为参数传过去, 因为要dc.BitBlt。 奇怪的是CPaintDC dc直接传总是说参数不能从Class CPaintDC 转换到Class CPaintDC, 这不是同一个类型么?!CPaintDC dc定义为成员变量又说没有合适的构造函数! 后来用指针就好了, 真是奇怪!大家知道是怎么回事么? 分是要散的,只是不想太早结了,想再讨论讨论