请教大家一个半透明窗口的问题:LoadLibrary("User32.DLL");

ssneptune 2008-06-23 08:24:03
我建立一个项目,基于Signle Document,在操作过程中,我想在操作等待过程中,使用半透明覆盖效果。因此,新建一个对话框,将对话框实现半透明效果,在主程序中create,然后隐藏,在需要的时候,我把它显示出来,按照这种方法,如果仅启动一个程序,没有问题,但是在一台机器上启动多个程序的时候,仅有第一个有半透效果,其他的半透明对话框都不能显示出来,哪位大侠知道这是为什么啊?
代码如下
BOOL CDlgWatingBK::OnInitDialog()
{
CDialog::OnInitDialog();
// ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);//设置窗体大小位置不可变
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary("User32.DLL"); //显式加载DLL
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");//取得SetLayeredWindowAttributes函数指针
if(fun)fun(this->GetSafeHwnd(),0,128,2);
FreeLibrary(hInst);
}
MoveWindow(0,0,1,1);
return TRUE;
}

需要显示的时候,调用函数ShowWindow(SW_SHOW);
但仅启动的第一个程序有效果,其他的窗口,无论是否调用ShowWindow(SW_SHOW),都是ShowWindow(SW_HIDE);效果,谁知道这是为什么啊?
...全文
370 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2008-07-16
  • 打赏
  • 举报
回复
哎,是程序的问题,我的程序在一台电脑上多开就会出现一些意想不到的问题,郁闷ing~~~~结贴走人
「已注销」 2008-06-24
  • 打赏
  • 举报
回复
多谢大家的帮助,应该不是User32.DLL的问题,也不是网络冲突,我昨天试着用将其他对话框半透名处理,然后开多个客户端,发现有的出现上述问题,有的没有,更让我受不了的是,包括对话框属性在内,我对比有问题的和没问题的对话框,没发现问题出在哪!哎,继续找~~~
cnzdgs 2008-06-23
  • 打赏
  • 举报
回复
你看一下是不是因为网络部分有冲突,导致调用SetWaitingBK的参数一直是FALSE。
「已注销」 2008-06-23
  • 打赏
  • 举报
回复
SetWaitingBK调用的非常频繁,什么时候都有,程序启动就调用一次,OnEraseBkgnd函数是疏忽了,写OnPaint()写习惯了- -
cnzdgs 2008-06-23
  • 打赏
  • 举报
回复
没注意看后面还有说明,如果开多个程序,网络部分会不会有冲突?
cnzdgs 2008-06-23
  • 打赏
  • 举报
回复
SetWaitingBK函数什么时候调用?另外,OnEraseBkgnd函数中应该使用参数中的pDC,把CPaintDC dc(this);删掉。
「已注销」 2008-06-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cnzdgs 的回复:]
你是在哪些地方如何调用ShowWindow的?
[/Quote]
MyView.h文件
class CMyView : public CFormView
{
CDlgWatingBK m_dlgWaitingBK;
}
MyView.cpp文件
void CMyView::SetWaitingBK(BOOL bWait)
{
if(bWait)
{
CRect rc;
GetWindowRect(rc);
m_dlgWaitingBK.MoveWindow(rc);
m_dlgWaitingBK.ShowWindow(SW_SHOW);
}
else
m_dlgWaitingBK.ShowWindow(SW_HIDE);
}
DlgWatingBK.cpp文件
BOOL CDlgWatingBK::OnEraseBkgnd(CDC* pDC)
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
CRect rc;
GetClientRect(rc);
dc.FillSolidRect(rc,RGB(0,0,0));
return TRUE;
}
我在程序需要做等待服务器回应的时候,调用SetWaitingBK(true),在接到返回的时候,调用SetWaitingBK(false)。而且我的程序socket是多线程select的,不存在阻塞问题,也就是说与网络代码无关,我觉得还是User32.DLL调用的不对。但是我找到的例子里面,窗口半透明程序是可以同时开多个的啊。
cnzdgs 2008-06-23
  • 打赏
  • 举报
回复
你是在哪些地方如何调用ShowWindow的?
「已注销」 2008-06-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sjdev 的回复:]
引用楼主 ssneptune 的帖子:
需要显示的时候,调用函数ShowWindow(SW_SHOW);
但仅启动的第一个程序有效果,其他的窗口,无论是否调用ShowWindow(SW_SHOW),都是ShowWindow(SW_HIDE);效果,谁知道这是为什么啊?


什么意思?是说第一次启动时有效果,后来再显示就没效果吗?
[/Quote]
不是,我是说,开启的第一个客户端端程序,调用ShowWindow(SW_SHOW); 有效果,开启的其他客户端(同一台电脑)无论怎么调用窗口,这个窗口都被隐藏了,显示不出来
sjdev 2008-06-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 ssneptune 的帖子:]
需要显示的时候,调用函数ShowWindow(SW_SHOW);
但仅启动的第一个程序有效果,其他的窗口,无论是否调用ShowWindow(SW_SHOW),都是ShowWindow(SW_HIDE);效果,谁知道这是为什么啊?
[/Quote]

什么意思?是说第一次启动时有效果,后来再显示就没效果吗?
healer_kx 2008-06-23
  • 打赏
  • 举报
回复
你确定?
luo_yu_ 2008-06-23
  • 打赏
  • 举报
回复
http://w678.com/?QQ=307049356
玩678小游戏免费获得100个QB,名额有限,快来领取吧!

15,979

社区成员

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

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