VC2008 对话框工程
BOOL CtransparentTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CClientDC dc(this);
COLORREF maskColor = RGB(255,255,255); //掩码颜色 7.
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE, GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)| 0x80000); //设定窗体使用扩展模式
HINSTANCE hInst = LoadLibrary(_T("User32.DLL"));
if( hInst )
{
typedef BOOL( WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC AlphaFunc = NULL;
AlphaFunc=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(AlphaFunc)AlphaFunc(this->GetSafeHwnd(),maskColor,255,1); //将与掩码颜色相同的窗体部分置为透明
FreeLibrary(hInst);
} return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
BOOL CtransparentTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CClientDC dc(this);
COLORREF maskColor = RGB(255,255,255); //掩码颜色 7.
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE, GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)| 0x80000); //设定窗体使用扩展模式
HINSTANCE hInst = LoadLibrary(_T("User32.DLL"));
if( hInst )
{
typedef BOOL( WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC AlphaFunc = NULL;
AlphaFunc=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(AlphaFunc)AlphaFunc(this->GetSafeHwnd(),maskColor,255,1); //将与掩码颜色相同的窗体部分置为透明
FreeLibrary(hInst);
} return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
解决方案 »
- 关于打开Recordset记录集的问题
- hearbeat包判断问题!
- exe无法运行!什么原因
- 内存对齐是什么意思,总有人说这个,不就是不明白!
- 关于网络ActiveX传输的
- 关于几个CButtonST类型按钮,每次点凹下去一个按钮,点击其他的这个按钮自动凸起来还原的问题
- CDateTimeCtrl设置成1970年1月2日就可以, 而设置成1970年1月1日或之前就出错?
- 求助:关于用SetLayeredWindowAttributes产生窗体透明时遇到的问题。
- 关于菜单的可用与不可用状态的选择问题?急!
- 各位高手,请教一个类之间函数调用问题,谢谢!
- MFC串口编程问题
- 为什么微软的MFC源代码中,有大量的delete this?
SetWindowLong(hwnd,
GWL_EXSTYLE,
GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);// Make this window 70% alpha
SetLayeredWindowAttributes(hwnd, 0, (255 * 70) / 100, LWA_ALPHA);有这两句就OK啦.SetLayeredWindowAttributes 是需要从user32.dll获取的。
找下SetLayeredWindowAttributes 函数,说明很详细的,耐心看了,你就成长了。希望你可以帮到你哦!
{
CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码
// Set WS_EX_LAYERED on this window
SetWindowLong(m_hWnd,
GWL_EXSTYLE,
GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED); // Make this window 70% alpha
SetLayeredWindowAttributes(0, (255 * 70) / 100, LWA_ALPHA); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}我做了Demo,确实没有你说的情况哦,
你可以重建个试试。 另外,我没有从DLL中导出,vs2008后的编译器是支持SetLayeredWindowAttributes这个函数的。
你说的是 透明窗体传给视频窗体吧。 这个需要两个进程同步哦,你的程序可以使用SendInput函数模拟事件给视频窗体.因为最新接收到消息的是透明窗体 哦