窗口随滑动条不能调整透明度?怎么回事?求指导`~

天一亮就跑 2011-12-16 12:26:31
我新建了个无模式对话框SlideTitle,在上面自己搞了个滑动条,然后即时把滑动条数据传送到主对话框New_SolutionDlg中,再调用主对话框的函数来修改主对话框的透明度,可是不管怎么调都没法响应,这是为什么?
另外,网上看到的调透明度的都是在oninitialDlg中完成的,难道一定只有初始对话框时才能调整吗?不然09的QQ是怎么调整的呢?求解释,谢谢啊~

附上程序源码地址:http://d.1tpan.com/tp0398203650
...全文
91 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
天一亮就跑 2011-12-16
  • 打赏
  • 举报
回复
另外,要用到GDI++库的,是VC++6.0的
天一亮就跑 2011-12-16
  • 打赏
  • 举报
回复
放出地址,完成版的:http://d.1tpan.com/tp0574174830
天一亮就跑 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 shen_wei 的回复:]

自定义消息 WM_TRANSWND WM_USER+1

void CSlideTitle::OnMouseMove(UINT nFlags, CPoint point)
else if (cRect.left>=Left && cRect.left<=Middle) //备注:26个点,为73-255的透明度
{
//CNew_solutionDlg pDlg;
……
[/Quote]
感谢shen_wei大大,给了我这个方法,我还不知道这种调用呢。。。呵呵,刚学mfc啊,见谅。我发现还要添加ON_MESSAGE(WM_TRANSWND, SetTransparent)
然后把setparent改为
BOOL CNew_solutionDlg::SetTransparent(WPARAM wParam,LPARAM lParam)
{
m_Blend.SourceConstantAlpha = lParam; //AC_SRC_ALPHA // 透明度
POINT ptWinPos = {rct.left, rct.top}; //needed
//窗口透明贴图:
//使用UpdateLayerWindow进行窗口透明处理
HMODULE hFuncInst = LoadLibrary("User32.DLL");
typedef BOOL (WINAPI *MYFUNC)(HWND, HDC, POINT*, SIZE*, HDC, POINT*, COLORREF, BLENDFUNCTION*, DWORD);
MYFUNC UpdateLayeredWindow;
UpdateLayeredWindow = (MYFUNC)GetProcAddress(hFuncInst, "UpdateLayeredWindow");
SIZE sizeWindow = {253, 605}; //needed
POINT ptSrc = {0, 0}; //needed
UpdateLayeredWindow(m_hWnd, hdcScreen, &ptWinPos, &sizeWindow, m_hdcMemory, &ptSrc, 0, &m_Blend, 2);
FreeLibrary(hFuncInst);

return TRUE;
}

然后postmessage变成::PostMessage(GetParent()->m_hWnd,WM_TRANSWND,(WPARAM)1,(cRect.left-Left)*7+73);
就行了,谢谢了~
天一亮就跑 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 afairycell 的回复:]

会用透明只是不变化,是不是没刷屏?Invalidate()用下这个
[/Quote]
这个加上去后程序直接死了、、、我去看看SetTransparent有没有出错额。
shen_wei 2011-12-16
  • 打赏
  • 举报
回复
自定义消息 WM_TRANSWND WM_USER+1

void CSlideTitle::OnMouseMove(UINT nFlags, CPoint point)
else if (cRect.left>=Left && cRect.left<=Middle) //备注:26个点,为73-255的透明度
{
//CNew_solutionDlg pDlg;
//pDlg.SetTransparent();
::PostMessage(GetParent()->m_hWnd,WM_TRANSWND,(WPARAM)(cRect.left-Left)*3+22,0);
}

//BOOL SetTransparent(int LayerN); 这个函数这样修改。。并开启屏蔽代码。。
afx_msg BOOL SetTransparent(WPARAM wParam,LPARAM lParam);
afairycell 2011-12-16
  • 打赏
  • 举报
回复
会用透明只是不变化,是不是没刷屏?Invalidate()用下这个
afairycell 2011-12-16
  • 打赏
  • 举报
回复
会用透明只是不变化,是不是没刷屏?Invalidate()用下这个

15,979

社区成员

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

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