📄 subject_32552.htm
字号:
<p>
序号:32552 发表者:dff 发表日期:2003-03-13 00:03:23
<br>主题:透明窗口
<br>内容:我现在需用MFC开发一个无颜色的窗口,但必须在 窗口中画几条线,同时这个窗口可以RESIZE和移动,并且窗口覆盖在一个视频窗口上能将视频窗口正确的显示出来,我应如何作???
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:bird 回复日期:2003-03-13 08:53:45
<br>内容:1.透明窗口 (显示视频窗口)<BR>2.窗口中画线<BR>3.窗口可以移动<BR>4.窗口可以调整大小<BR><BR><BR>这几个功能都不难实现!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:魔刀 回复日期:2003-03-13 10:53:43
<br>内容://加入WS_EX_LAYERED扩展属性<BR>SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);<BR>HINSTANCE hInst = LoadLibrary("User32.DLL"); <BR>if(hInst) <BR>{ <BR> typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD); <BR> MYFUNC fun = NULL;<BR> //取得SetLayeredWindowAttributes函数指针 <BR> fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");<BR> if(fun)fun(this->GetSafeHwnd(),0,96,2); <BR> FreeLibrary(hInst); <BR>}<BR><BR>在对话框初始化时调用即可
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dff 回复日期:2003-03-13 12:45:53
<br>内容:使用USER32中的SetLayeredWindowAttributes函数是不行的,因为我的透明窗口是覆盖在一个视频窗口上,由于视频窗口是以每秒30桢的速度在刷新,因而透明窗口中画上去的线在不停的抖动!!!!<BR><BR>不知bird先生说所有的技术不难实现 ,如何作???????
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:微笑的撒旦 回复日期:2003-03-13 14:41:29
<br>内容:你是不是想做OSD?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:bird 回复日期:2003-03-17 10:10:20
<br>内容:最常想到的方法,当然是使用Invalidate(TRUE);//刷新整个无效区<BR><BR> UpdateWindow();<BR><BR> 这时,会刷新整个程序区域的无效区,闪烁非常严重,改正如下:<BR><BR> InvalidateRect(&m_rtPic,TRUE); file://仅刷新图像显示区域<BR><BR> UpdateWindow();<BR><BR> 此时,仅会刷新图像所在区域,闪烁有所缓解,再进一步,可使用<BR><BR> InvalidateRect(&m_rtPic,TRUE); file://使用快速重画<BR><BR> ReDrawWindow(&m_rtPic,NULL,RDW_INTERNALPAINT| RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);<BR><BR>进行处理,此时闪烁更进一步减小,考虑到,其他部分可能影响刷新区域,干脆将OnPaint()直接使用在此处,即变为:<BR><BR> OnPaint(); <BR><BR> 但如果在OnPaint()中有大量的绘图语句,这种方法仍旧不可行,考虑到不能激发OnPaint()这一因素及控制刷新范围,我采用了如下非标准的方法解决,代码如下:<BR><BR> CDC *pDC;<BR><BR> pDC = GetDC();<BR><BR> if(m_pImgInfo != NULL)<BR><BR> pDC->BitBlt(m_wShowLeft,m_wShowTop,m_lWidth,m_lHeight,&m_AdjDC,m_lPicLeft,m_lPicTop,SRCCOPY);<BR><BR> ReleaseDC(pDC);<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:bird 回复日期:2003-03-17 11:10:38
<br>内容:http://www.copathway.com/itbookreview/view_paper.asp?paper_id=676
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:bear 回复日期:2003-03-17 15:41:35
<br>内容:去看看:<BR>http://www.vckbase.com/document/viewdoc.asp?id=333
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -