现在的代码如下
在Dialog 的OnInitDialog中:CRect rect(5,5,200,30);
CLientDC dc(this);
dc.SetBkMode(TRANSPARENT);
dc.DrawText("user",&rect,DT_LEFT);运行确看不到写的字?文字的下面是一幅pictrue控件。还有其它方法实现我的效果么?
在Dialog 的OnInitDialog中:CRect rect(5,5,200,30);
CLientDC dc(this);
dc.SetBkMode(TRANSPARENT);
dc.DrawText("user",&rect,DT_LEFT);运行确看不到写的字?文字的下面是一幅pictrue控件。还有其它方法实现我的效果么?
解决方案 »
- 为何Variant.vt = vt_l4,varIndex.lVal = 0时生成的debug版本报异常
- 关于CPtrList
- 请教一下 PacketReceivePacket 问题!
- 如何大量提高本地网络占用率?(比如100M)
- 为什么用URLDownloadToFile下载文件时,如果网络慢一些或者通过代理上网,下载失败的次数很多,如何把连接超时时间设置长一些啊。如果改善
- 寻找DirectShow 高手!! 共同交流
- 高手帮忙阿,分不够在加,剪贴板的问题
- 请教高手问题,跟ASN.1有关.大家都来看看
- windows下用记事本编辑c源文件,在cmd终端编译运行
- 请问哪儿有DirectX Media SDK.
- 文文档中加速键的问题
- 我该怎么办?
应该这样子吧
if(pWnd->m_hWnd==GetDlgItem(IDC_PIC)->m_hWnd)
{
CRect rect(5,5,200,30);CDC *dc=GetDlgItem(IDC_PIC)->GetDC();
dc->SetBkMode(TRANSPARENT);
dc->DrawText("user",&rect,DT_LEFT);//用OnCtlcolor函数提供的pDC也可以
}
子类化控件,响应WM_PAINT消息,实现在pictrue控件添加透明文字
to: fanqing(火影忍者+26%)
你的办法不行哦!to :krh2001(边城浪子)我在paint里写好像也不行
能说说具体的代码么
是对话框中的OnCtlcolor
实在不行留email我发给你
if(pWnd->m_hWnd==GetDlgItem(IDC_PIC)->m_hWnd)
{
CRect rect(5,5,200,30);CDC *dc=GetDlgItem(IDC_PIC)->GetDC();
dc->SetBkMode(TRANSPARENT);
dc->DrawText("user",&rect,DT_LEFT);
--------------------
OnCtlColor(
CDC* pDC,
CWnd* pWnd,
UINT nCtlColor );
This method is called by the framework when a child control is about to be drawn. Most controls send this message to their parent, usually a dialog box, to prepare the pDC for drawing the control using the correct colors.}正解!在构建IDC_PIC(图片控件ID)这个时,对其画.
或者先继承控件类,在类OnEraseBkgnd消息中画你要画的东东如加一张图片
代码如下:
BOOL CListBoxdzq::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
dcCompatible.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);
return TRUE;
}
再在你要加这个控件上
public CXXX m_xx;
m_xx.Create(WS_CHILD|WS_VISIBLE|LBS_STANDARD|WS_HSCROLL,
CRect(10,10,200,200), this, 1);
OnInitDialog中通过dc绘制的内容在接收到WM_PAINT消息时会失去
建议阅读MSDN关于WM_PAINT消息的部分
但是如果你把pic控件与bmp图片关联后,运行程序就只能看到图片,而看不到写的字
//#include "stdafx.h"
#include "fan.h"
#include "My.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// MyMy::My()
{
}My::~My()
{
}
BEGIN_MESSAGE_MAP(My, CStatic)
//{{AFX_MSG_MAP(My)
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// My message handlersBOOL My::OnEraseBkgnd(CDC* pDC)
{
CBitmap bm;
bm.LoadBitmap(IDB_BITMAP1);
CRect rect;
GetWindowRect(&rect);
BITMAP bm1;
CDC menbm;
menbm.CreateCompatibleDC(pDC);
menbm.SelectObject(&bm);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&menbm,1,1,SRCCOPY);
pDC->SetBkMode(1);
pDC->TextOut(1,1,"fanqing");
return true;
}
楼主你也变一下观念吧.
我从CStatic派生一个CMyStatic.添加OnEraseBkgnd函数,
再在对话框里加一个CMyStatic变量,然后Create,再show,这样不行的。
to fanqing(火影忍者+26%) 可不可以将你用OnEraseBkgnd方法实现的例子发给我一下
http://community.csdn.net/Expert/topic/3797/3797140.xml?temp=3.513736E-02我得E_MAIL
[email protected]
{
// 这个不能要
// CPaintDC dc(this); // device context for painting
CWnd::Default(); // 让控件画它自己的东西
// TODO: Add your message handler code here
// 接下来就轮到我了画了 :) CClientDC dc(this);
// 一个大点的字体,看得清楚点:)
CFont font;
font.CreatePointFont(300, "宋体", &dc);
CFont* pof = dc.SelectObject(&font); // 文字颜色
dc.SetTextColor(RGB(255,0,0));
// 透明
dc.SetBkMode(TRANSPARENT);
// 绘文字
dc.TextOut(10,10,"͸Ã÷ÎÄ×Ö"); dc.SelectObject(pof);}
特别感谢fanqing(火影忍者+26%