鱼C论坛

 找回密码
 立即注册
查看: 3010|回复: 11

如何创建一个半透明窗口

[复制链接]
发表于 2015-5-10 10:38:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
怎样创建一个透明的子窗口,使用createwindow和win32




窗口代码是这样的:
#include<windows.h>
#include<stdio.h>

WNDCLASS wndclass;
HWND hwnd;
MSG Msg;

long CALLBACK WndProc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
);

int WINAPI WinMain
(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPTSTR lpCmdLine,
    int nCmdShow
)
{
typedef struct_WNDCLASS;
{
wndclass.style=CS_VREDRAW|CS_HREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=TEXT("HAHA");
}
RegisterClass(&wndclass);

hwnd=CreateWindow( TEXT("HAHA"),
TEXT("XIXI"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);

ShowWindow(hwnd,nCmdShow);

UpdateWindow(hwnd);

while(GetMessage(&Msg,NULL,0,0));
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
};
return 0;
};

long CALLBACK WndProc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}





1.WS_EX_LAYERED可能没定义,我们可以直接取值0x80000
       是不是就可以这样写
       wndclass.style=CS_VREDRAW|CS_HREDRAW|0x80000
2.SetWindowLong(m_hWnd,GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
       为什么编译的时候会提示错误:error C2065: 'this' : undeclared identifier
3.BOOL SetLayeredWindowAttributes(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags);
       会提示错误:error C2143: syntax error : missing ';' before 'type'
4.void CFloatWnd::OnUpdateTransparent(int iTransparent)
{
  HINSTANCE hInst = LoadLibrary("User32.DLL");
  if(hInst)
  {
    typedef BOOL (WINAPI *SLWA)(HWND,COLORREF,BYTE,DWORD);
    SLWA pFun = NULL;
    pFun = (SLWA)GetProcAddress(hInst,"SetLayeredWindowAttributes");
    if(pFun)
    {
      pFun(m_hWnd,0,iTransparent,2);
    }
    FreeLibrary(hInst);
  }
}
       上述代码中的几个HWND分别指的是什么,还有上面这段代码上面意思帮注释下
5.以及上面那些代码我应该怎么插入到我原来的代码里面,就是放在上面位置

本人新手,请大神们讲的通俗点,谢谢!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-5-10 11:42:48 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-10 12:18:52 | 显示全部楼层
freeparty 发表于 2015-5-10 11:42
http://bbs.fishc.com/thread-58619-1-1.html

SetLayeredWindowAttributes(hwnd, RGB(255, 255, 255), 0, LWA_COLORKEY);//设置白色为透明色
会报错:warning C4013: 'SetLayeredWindowAttributes' undefined; assuming extern returning int
                error C2065: 'LWA_COLORKEY' : undeclared identifier
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-10 12:20:56 | 显示全部楼层
本帖最后由 迷雾少年 于 2015-5-10 12:24 编辑

楼主确定你的代码没问题???..
while(GetMessage(&Msg,NULL,0,0));
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
};
return 0;
};



while(GetMessage(&Msg,NULL,0,0));  看后面那个;....
昨天          就有人问窗口为什么没影响........:mad:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-10 12:22:06 | 显示全部楼层
本帖最后由 迷雾少年 于 2015-5-10 12:24 编辑

http://www.cnblogs.com/fangyukuan/archive/2012/04/18/2454660.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-10 12:29:33 | 显示全部楼层
你的IDE环境版本太低了,解决方法是百度LWA_COLORKEY的值然后在代码中替换掉原来的宏。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-10 13:22:36 | 显示全部楼层
freeparty 发表于 2015-5-10 12:29
你的IDE环境版本太低了,解决方法是百度LWA_COLORKEY的值然后在代码中替换掉原来的宏。

LWA_COLORKEY的值   百度不到,能不能告诉我如何更新IDE环境版本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-10 15:17:09 | 显示全部楼层
救赎但不重生 发表于 2015-5-10 13:22
LWA_COLORKEY的值   百度不到,能不能告诉我如何更新IDE环境版本

安装VS2013
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-10 15:17:11 | 显示全部楼层
救赎但不重生 发表于 2015-5-10 13:22
LWA_COLORKEY的值   百度不到,能不能告诉我如何更新IDE环境版本

安装VS2013
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-10 15:30:43 | 显示全部楼层

XP的系统伤不起啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-10 15:32:10 | 显示全部楼层
迷雾少年 发表于 2015-5-10 12:20
楼主确定你的代码没问题???..
while(GetMessage(&Msg,NULL,0,0));
{

不好意思,打错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-10 15:56:21 | 显示全部楼层
LWA_COLORKEY  0x00000001

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
freeparty + 1 + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 22:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表