c++请问如何用updatelayeredwindow函数使窗口半透明,或者说setayeredwindow也可以

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++请问如何用updatelayeredwindow函数使窗口半透明,或者说setayeredwindow也可以相关的知识,希望对你有一定的参考价值。

#include <windows.h>
//#include "resource.h"
ATOM MyRegisterClass(HINSTANCE);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HWND hwNd;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

MSG msg;
if (!MyRegisterClass(hInstance))

MessageBox(NULL, TEXT("窗口注册失败"), TEXT("提示信息"), MB_OK);
return 0;

int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);

HWND hwnd = CreateWindowEx(
WS_EX_LAYERED | WS_EX_TOOLWINDOW|WS_EX_TOPMOST,
TEXT("SCREENC"),
TEXT("screen"),
/*WS_POPUP |*/ WS_VISIBLE ,
300,300, 700, 500,
NULL,
NULL,
hInstance,
NULL);
hwnd = hwNd;
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
//SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
while (GetMessage(&msg, 0, 0, 0))

TranslateMessage(&msg);
DispatchMessage(&msg);

return 0;

ATOM MyRegisterClass(HINSTANCE hInstance)

WNDCLASS wc;
wc.cbClsExtra = 0;
wc.cbWndExtra =0;//SetWindowLong(hwNd, GWL_STYLE, GetWindowLong(hwNd, GWL_STYLE) | WS_EX_LAYERED);;
wc.hbrBackground =(HBRUSH)GetStockObject(BLACK_BRUSH);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
wc.hInstance = hInstance;
wc.lpfnWndProc =(WNDPROC) WndProc;
wc.lpszClassName = TEXT("SCREENC");
wc.lpszMenuName = NULL;
wc.style= CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
return RegisterClass(&wc);

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

//SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 100, LWA_ALPHA | LWA_COLORKEY); //LWA_ALPHA | LWA_COLORKE
BLENDFUNCTION bl;
bl.SourceConstantAlpha = 100;
bl.BlendOp = 0; //theonlyBlendOpdefinedinWindows2000
bl.BlendFlags=0; //nothingelseisspecial...
bl.AlphaFormat=1; //...
switch (uMsg)

/*case WM_LBUTTONDOWN:
MessageBeep(0);
SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 150, LWA_ALPHA | LWA_COLORKEY);
break;*/
case WM_RBUTTONDOWN:
MessageBeep(0);
UpdateLayeredWindow(hWnd,NULL,NULL,NULL,NULL,NULL,RGB(100,100,100),&bl,NULL);
break;
case WM_LBUTTONDBLCLK:
PostQuitMessage(0);
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);

return 0;

参考技术A


追问

我的天这个图片。。。
源码能直接发给我吗
如果说好的话可以再追加50分

如何用C++显示二进制

如cout<<std::hex是16进制
cout<<std::oct 8
cout<<std::dec 10
请问怎么显示2进制?

在C++语言的标准输出中,有16进制,10进制和8进制的输出格式,但是没有二进制的输出格式。所以要想输出二进制,只能靠自己写函数进行输出了。

基本思想为通过移位操作+与操作取出各个位上的值,然后对其进行输出即可。

以32位无符号整型数据二进制输出为例,代码如下:

#include <iostream>
using namespace std;
void binary_print(const unsigned int &v)

    int i;
    int bit;
    int size = sizeof(v)*8;
    //这里的size是输入参数v的位数,直接用32代替也可以,但写成sizeof(v)*8这样更为通用。
    for(i = 0; i < size; i ++)
    
        bit = v&(1<<(size-i-1));//提取出第i位的值
        if(bit == 0) cout << 0;
        else cout << 1;
        if(i % 4 == 3)cout << \' \'; //为了方便阅读输出,在每输出四位后加一个空格
    

用这个函数调用binary_print(0x1a2b3c4d);

可以得到输出

0001 1010 0010 1011 0011 1100 0100 1101
参考技术A int aaa = 20;

方法一:
char str[255];
itoa(aaa, str, 2);
cout << str;

方法二:
cout << bitset<sizeof(int)*8> (aaa);

方法三,四,五.....:
自己写一些函数.....本回答被提问者采纳
参考技术B 没有直接方法。自己编吧。

以上是关于c++请问如何用updatelayeredwindow函数使窗口半透明,或者说setayeredwindow也可以的主要内容,如果未能解决你的问题,请参考以下文章

请问c++如何用循环语句打印下面的图形?

请问如何用C或C++把mysql数据库中的某一列数据读出来,然后把这一列数据存放在数组中?急用!!!谢谢!

如何用C++显示二进制

在C++中如何用schema校验xml文件

请问如何用C语言实现“生产者与消费者问题”?(最好附上完整的C语言源代码)

请问如何用matlab求两条曲线的误差??