首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

mfc: 在CStatic(image)上怎么叠加文字

2012-01-18 
mfc: 在CStatic(image)上如何叠加文字?我用mfc写了个dialog.dialog上放了个cstatic(image类型).然后movewi

mfc: 在CStatic(image)上如何叠加文字?
我用mfc写了个dialog.
dialog上放了个cstatic(image类型).然后movewindow到一个位置,然后InvalidateRect(),updatewindow().
在onpaint中,使用了CPaintDC的textout函数输出一行文字到同一个位置.

但是,每次文字都被cstatic挡住.
是否有办法将文字叠加显示到cstatic上?


[解决办法]
自绘此CStatic?
[解决办法]
重载CStatic,在其OnPaint中绘制位图、输出文字。
[解决办法]
先使用CWnd::GetDC取得CStatic类的DC,然后TextOut
CDC* pDC = m_static1.GetDC();
pDC-> TextOut(10, 10, "dkffdkdfjdkfkfdjk ");

[解决办法]
画那个CStatic,
DC不好叠加的,除非你用内存DC玩。那也不容易啊。

[解决办法]
显示到了后面...汗
[解决办法]
关注中
[解决办法]
同Mackz

派生CStatic,在CYourStatic的OnPaint(注意不是你的Dlg的OnPaint)中先绘制位图、再输出文字。
[解决办法]
THE SAME TO:dazedase(什么也不懂,什么也不会,所以我很菜)(▲▲▲▲▲)(★★) ( )
[解决办法]
获得static控件的DC

然后用mDC-> TextOut(str);就可以了
[解决办法]
你要为Dlg上的Static控件添加CMyStatic类型的控件变量(注意要改ID)
[解决办法]
我觉得你这个好像可以完全把CStatic去掉的,直接把那幅图片BitBlt出来,再在上面写字就好拉.
[解决办法]
以前写的代码,放在DrawItem中。先看看。有一些多余的代码(设背景什么的)自己去掉就可以了。应该能用。
void CBitmapStatic ::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
CBitmapStatic ::DrawItem(lpDIS);

if (!m_strText.IsEmpty()) {
// Draw the button text using the text color red.
COLORREF crOldColor = ::SetTextColor(lpDIS-> hDC, m_crTextColor);
int iBkMode = ::SetBkMode(lpDIS-> hDC, TRANSPARENT);


RECT rcText;
if (lpDIS-> itemState & ODS_SELECTED) {
rcText.top = lpDIS-> rcItem.top + m_rcTextMargin.top + 1;
rcText.left = lpDIS-> rcItem.left + m_rcTextMargin.left + 1;
rcText.bottom = lpDIS-> rcItem.bottom - m_rcTextMargin.bottom + 1;
rcText.right = lpDIS-> rcItem.right - m_rcTextMargin.right + 1;
} else {
rcText.top = lpDIS-> rcItem.top + m_rcTextMargin.top;
rcText.left = lpDIS-> rcItem.left + m_rcTextMargin.left;
rcText.bottom = lpDIS-> rcItem.bottom - m_rcTextMargin.bottom;
rcText.right = lpDIS-> rcItem.right - m_rcTextMargin.right;
}

if (m_nTextFormat & DT_WORDBREAK) {
RECT rcCalc = rcText;
::DrawText(lpDIS-> hDC, m_strText, m_strText.GetLength(), &rcCalc, DT_CALCRECT | m_nTextFormat);

int delta = rcText.bottom - rcCalc.bottom;
if (delta > 0) {
rcText.top += delta / 2;
}
}

::DrawText(lpDIS-> hDC, m_strText, m_strText.GetLength(), &rcText, m_nTextFormat);

::SetBkMode(lpDIS-> hDC, iBkMode);
::SetTextColor(lpDIS-> hDC, crOldColor);

}
}

热点排行