我要在对话框里画一些位图,需要透明的,我需要知道对话框的颜色吗??
或者有其他的方法。
或者有其他的方法。
解决方案 »
- 怎么向所有标题 为“记事本的”窗口发送按键信息。
- assertion failed 请教:(debug版出错,release版没问题)
- CDemoApp::PreTranslateMessage(MSG* pMsg) 收到消息 关闭窗口要怎么做
- 急!200点,VC++和sql server2000,插入jpg图片到数据库的写法。
- 两个view类间切换的问题
- 请问如何在VCKBASE的在线杂志中搜索文章?
- 请问如何把一个文件里的全部内容存成一个CString字符串?
- 问一个双向链表的问题.急!
- 光标如何下移?
- 怎么样才能把CView的SDI工程转换成CEditView的SDI工程??
- 闲得无聊想做个自动排课系统玩玩请教算法思路?
- 串口高手看过来!
BOOL CSampleApp : : InitInstance ( )
{
…
//use blue dialog with yellow text .
SetDialogBkColor (RGB (0, 0, 255 ), RGB ( 255 ,255 , 0 ) )
…
}
需要重画对话(或对话的子控件)时,Windows向对话发送消息WM_CTLCOLOR,通常用户可以让Windows选择绘画背景的刷子,也可重置该消息指定刷子。下例说明了创建一个红色背景对话的步骤。
首先,给对话基类增加一人成员变量
CBursh :class CMyFormView : public CFormView
{
…
private :
CBrush m_ brush // background brush
…
}
其次, 在类的构造函数中将刷子初始化为所需要的背景颜色。
CMyFormView : : CMyFormView ( )
{
// Initialize background brush .
m_brush .CreateSolidBrush (RGB ( 0, 0, 255) )
}
最后,使用ClassWizard处理WM_CTLCOLOR消息并返回一个用来绘画对话背景的刷子句柄。注意:由于当重画对话控件时也要调用该函数,所以要检测nCtlColor参量。
HBRUSH CMyFormView : : OnCtlColor (CDC* pDC , CWnd*pWnd , UINT nCtlColor
)
{
// Determine if drawing a dialog box . If we are, return +handle to
//our own background brush . Otherwise let windows handle it .
if (nCtlColor = = CTLCOLOR _ DLG )
return (HBRUSH) m_brush.GetSafeHandle ( )
return CFormView : : OnCtlColor (pDC, pWnd , nCtlColor
)
}
pwnd=AfxGetMainWnd(); CDC *pDc=(CDC*)pwnd->GetDC();
COLORREF cl;
cl=pDc1->GetBkColor();
COLORREF 是一个结构,含有RGB信息,返回值CL,就是所得的颜色信息
透明的颜色)。在BCB里只要指明Bitmap为透明的,以及透明颜色为白色,那么在DC上画
Bitmap时,画出来的Bitmap中,原来的白色就变成原来画布的内容了。就好像Icon一样,
Icon中如果有部分颜色为透明色,那么透明色这部分就是DC上原来的东西。Icon其实就是
由2个Bitmap组成的,其中一个是MaskBitmap。BCB中的透明位图的原理也是一样,当你指
定Bitmap为透明时,BCB会自动根据透明颜色创建一个MaskBitmap。有了MaskBitmap,如果
位图是1:1显示的,使用API函数MaskBlt就可以了,否则还需要做一些其它处理(BCB自动
完成)。所以在BCB中使用透明Bitmap是非常简单的。但是BCB源程序,却是花了好多代码
才实现这个功能的。如果是1:1画透明的Bitmap,还有另外一个方法,就是使用类似不规则窗体的办法,设定画
图区域。查找Bitmap中的白色点,组成一个区域,然后使用SelectObject(hDC,gRegion)选
择区域,这样画出来的Bitmap,原来白色的部分就是DC原本的颜色了。
2.如果想要真正的噩梦透明法,自己创建一个透明函数比较好,建立几个中间位图,用
XOR,AND,OR等模式绘图组合一下(六个中间位图比较好,全黑和全白得必须有),也比较简单,试一下就可以了,最后的输出用SRCCOPY。
3.利用人类视觉弱点采用伪透明技术,这个略显专业,你可能现在一时掌握不了(学了空间物理建模后再说吧)。
{
m_crActiveFg=::GetSysColor(COLOR_BTNTEXT);
if(bRepaint==TRUE)Invalidate();
}