在CStatic控件上写字的问题 我在对话框上定义了一个CStatic成员 创建后加载了一幅图片 然后要在图片上写上一行字。 我是在Onpaint函数里写的。 但是显示时没有。 只要一遮挡就显示出来了。 改到OniniteDlg函数里 只显示图片不显示字请问是什么问题啊 ! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是什么类啊CSDN上都查不到??怎么用啊 ! 把CStatic这个控件窗口这么整一下 ShowWindow(SW_HIDE); ShowWindow(SW_NORMAL); 楼上说的不行啊那相当于调用了InVilidate闪个不停在Onpaint里用的 以CWnd为基类实现一下,然后把CStatic定义为这个类或者把你的cstatic改为picture control 从cstatic下继承,然后在OnEraseBk 擦除背景的消息中绘制,不要再调用原来的擦除函数,return true。 增加接口 设置图片,文字。 在dlg中将 控件类型修改为新的类就可以了。 要使用标准的继承方式进行扩展, 在dlg中画,代码很难看,也没有模块性。 // 重载CStatic类型,在WM_PAINT消息的OnPaint函数中加载Bitmap位图和绘制文字void CNewStatic::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here CString strText(_T("Hello,World!")); CDC memDC; memDC.CreateCompatibleDC(&dc); CRect rc; GetClientRect(&rc); CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1); HBITMAP hOldbmp = (HBITMAP)memDC.SelectObject(bmp); memDC.SetBkMode(TRANSPARENT); memDC.DrawText(strText, &rc, DT_CENTER|DT_VCENTER); dc.BitBlt(0, 0, rc.Width(), rc.Height(), &memDC, 0, 0, SRCCOPY); memDC.SelectObject(hOldbmp); bmp.DeleteObject(); memDC.DeleteDC(); // Do not call CStatic::OnPaint() for painting messages} 然后要在图片上写上一行字。 我是在Onpaint函数里写的-----------------------Onpaint函数里写的代码呢?从现象来看你是用主对话框的DC来写文字的,而你显示的图片却是由CStatic控件来管理的,当你启动的时候你主对话框的DC写出来的文字以后会被CStatic控件的刷新显示给覆盖掉。当你遮挡主对话框的时候就会产生ONPAINT消息来写文字,而此时CStatic控件并未被挡住,所有不会产生ONPAINT消息,所以文字就显示出来了。由于一个在子窗口更新,一个在主窗口更新,所有很难协调一致,最好的办法就是用楼上的方法,都放在重载的CSTATIC类中显示。 如何用VC2008取得Delphi DLL近回的值VARIANT类型?? 请问vc++软件左侧的资源视图,类视图框架是怎么做出来的 有什么办法可以拉伸窗口却不能窗口大小改变 如何获得一个窗口的窗口过程函数? 熟悉CxImage的人进来合拿分!!! 请高手指点:about SDI and MDI Programming 如何将一个函数拷贝到内存中? 获取外部listview问题请教。 vs2008 编译release版特别慢 一个转化问题 在线等答案 。如何用vc实现在一个文件夹内创建20万个小文件 二位数组
CSDN上都查不到??
怎么用啊 !
ShowWindow(SW_NORMAL);
然后把CStatic定义为这个类或者把你的cstatic改为picture control
// 重载CStatic类型,在WM_PAINT消息的OnPaint函数中加载Bitmap位图和绘制文字
void CNewStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CString strText(_T("Hello,World!"));
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CRect rc;
GetClientRect(&rc);
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
HBITMAP hOldbmp = (HBITMAP)memDC.SelectObject(bmp);
memDC.SetBkMode(TRANSPARENT);
memDC.DrawText(strText, &rc, DT_CENTER|DT_VCENTER);
dc.BitBlt(0, 0, rc.Width(), rc.Height(), &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(hOldbmp);
bmp.DeleteObject();
memDC.DeleteDC();
// Do not call CStatic::OnPaint() for painting messages
}
-----------------------
Onpaint函数里写的代码呢?从现象来看你是用主对话框的DC来写文字的,
而你显示的图片却是由CStatic控件来管理的,当你启动的时候你主对话框的DC写出来的文字以后会被CStatic控件的刷新显示给覆盖掉。
当你遮挡主对话框的时候就会产生ONPAINT消息来写文字,而此时CStatic控件并未被挡住,
所有不会产生ONPAINT消息,所以文字就显示出来了。由于一个在子窗口更新,一个在主窗口更新,所有很难协调一致,最好的办法就是用楼上的方法,都放在重载的CSTATIC类中显示。