请问如何实现背景透明的CEdit

findloo 2008-01-18 06:01:25
谢谢
...全文
339 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Just4life 2008-01-20
  • 打赏
  • 举报
回复
到时捧场去哈
sjdev 2008-01-19
  • 打赏
  • 举报
回复
1.从CEdit派生自己的类,叫CXEdit

2.在CXEdit中响应WM_LBUTTONDOWN消息,并在OnLButtonDown消息中写下如下语句

GetParent()->Invalidate();


3.所有需要使用透明特性的Edit,都创建一个控件变量,并手动把CEdit m_xxx;改为CXEdit

4.OnCtlColor函数中,还使用上面的上面我写的代码.

5.如此,搞定.


另:GetParent()->Invalidate(); 将导致刷新整个父窗口,如果再精进一点,可以考虑只刷新Edit区,
你说的透明特性也正是我想要使用的特性,现在大概是解决了,回头我会写一篇blog来记述整个过程,欢迎到时捧场.

另2:这个问题还真就不太好寻思.

findloo 2008-01-19
  • 打赏
  • 举报
回复
试过了,当用鼠标选中文本时,先前被选中的文本后面的背景色依然在~
还是不行呀,救救我!
sjdev 2008-01-19
  • 打赏
  • 举报
回复
可以使用下面的代码:

HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
switch (nCtlColor)
{
case CTLCOLOR_EDIT:
{
CBrush brush;
pDC->SetBkMode(TRANSPARENT);
brush.CreateStockObject(NULL_BRUSH);
return brush;
}
}
return hbr;
}
longjing_g 2008-01-18
  • 打赏
  • 举报
回复
透明和刷新本来就是冲突的,我解决办法就是整个窗口刷新。
findloo 2008-01-18
  • 打赏
  • 举报
回复
大家帮我想想办法啊
cnzdgs 2008-01-18
  • 打赏
  • 举报
回复
只处理OnCtlColor不行,必须自己画。
findloo 2008-01-18
  • 打赏
  • 举报
回复
不行啊!我是这样试的:

HBRUSH CMyEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
// TODO: 在此更改 DC 的任何属性
if (nCtlColor == CTLCOLOR_EDIT)
{
pDC->SetBkMode(TRANSPARENT);
}

return HBRUSH(GetStockObject(HOLLOW_BRUSH));
}

但是它好像不能自动刷新了,文本后面被填充了,怎么解决呢?
iyranly 2008-01-18
  • 打赏
  • 举报
回复
在主对话框里重载
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
加上:
pDC-> SetBkMode(TRANSPARENT);

试试吧,原理应该差不多

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧