GDI/GDI+这些破事
本文是杂篇,纯属笔记,想到哪写到那!
1、获取像素的RGB以及填充
CPaintDC dc(m_hWnd);
COLORREF color=dc.GetPixel(,);
int R=GetRValue(color);
int G=GetGValue(color);
nt B=GetBValue(color);
dc.FillSolidRect(m_rcWindow,RGB(R,G,B));
2、从图片获取窗体Region
HRGN CreateRegionFromBitmap(Bitmap* bitmap, BYTE alphaValve/* = 0*/)
{
UINT width = bitmap->GetWidth();
UINT height = bitmap->GetHeight(); Color color;
HRGN hRegion = ::CreateRectRgn(, , width, height);
HRGN rgn = ::CreateRectRgn(, , width, height);
for (UINT h = ; h < height; ++h)
{
for (UINT w = ; w < width; ++w)
{
UINT start = w;
while (w < width)
{
bitmap->GetPixel(w, h, &color);
if (color.GetAlpha() > alphaValve)
break;
++w;
}
if (w > start)
{
::SetRectRgn(rgn, start, h, w, h + );
::CombineRgn(hRegion, hRegion, rgn, RGN_DIFF);
}
}
}
::DeleteObject(rgn);
return hRegion;
} //////////////////////////
调用:
Bitmap bitmap(_T("图片路径"));
HRGN m_rgn;
m_rgn=CreateRegionFromBitmap(&bitmap,254);//不取半透明图像
3、UpdateLayeredWindow
Image *m_pImageBackground; ModifyStyleEx(, WS_EX_LAYERED);
typedef BOOL (WINAPI*UpdateLayeredWindowFunc)(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);
m_pImageBackground = Image::FromFile(_T("图片路径")); PAINTSTRUCT ps;
HDC hdc = BeginPaint( &ps);
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hBitmap = CreateCompatibleBitmap(hdc,,); SelectObject(hdcMem, hBitmap); Graphics graph(hdcMem);
graph.DrawImage(m_pImageBackground, , , , ); HMODULE hDll = LoadLibrary(_T("user32.DLL"));
UpdateLayeredWindowFunc UpdateLayeredWindow=(UpdateLayeredWindowFunc)GetProcAddress(hDll, "UpdateLayeredWindow"); int nClientWith= GetSystemMetrics(SM_CXFULLSCREEN);
int nClientHeigh= GetSystemMetrics(SM_CYFULLSCREEN);
int x = (nClientWith-)/;
int y = (nClientHeigh-)/; POINT dstPoint = {x,y};
POINT srcPoint = {,};
SIZE size = {,};
BLENDFUNCTION m_Blend;
m_Blend.BlendOp=;
m_Blend.BlendFlags=;
m_Blend.AlphaFormat=;
m_Blend.SourceConstantAlpha=; UpdateLayeredWindow(m_hWnd,hdc,&dstPoint,&size,hdcMem,&srcPoint,,&m_Blend,); FreeLibrary(hDll);
4、画图
CBitmap m_btm_main; HBITMAP GetBitmapFromFile( LPCWSTR pFile )
{
std::auto_ptr<Bitmap> pBmp(new Bitmap(pFile));
if(!pBmp.get())
return NULL;
HBITMAP hBmp = NULL;
Color backColor = Color(,,,);
if(Ok!=pBmp->GetHBITMAP(backColor,&hBmp))
return NULL;
return hBmp;
}
void SetBgBmp(CString strMain)
{
m_btm_main.Attach(GetBitmapFromFile(strMain));
}
BOOL DrawBmp( HDC hdc, CRect rect, HBITMAP hBitmap)
{
BITMAP bm;
GetObject(hBitmap,sizeof(bm),(VOID*)&bm);
INT nWidth = bm.bmWidth;
INT nHeight = bm.bmHeight;
CDC memdc;
memdc.CreateCompatibleDC(hdc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(hdc,nWidth,nHeight);
memdc.SelectBitmap(hBitmap); BLENDFUNCTION bf = {,,,}; return ::AlphaBlend(hdc,rect.left,rect.top,nWidth,nHeight,memdc,,,nWidth,nHeight,bf); } 调用:
CPaintDC dc(m_hWnd);
DrawBmp(dc,m_rcWindow,m_btm_main);
5、设置顶层窗体
在初始化函数中调用
SetWindowPos(HWND_TOPMOST,,,,,SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE);
GDI/GDI+这些破事的更多相关文章
- GDI & GDI+
GDI GDI绘图中的映射模式CDC::SetMapMode() GDI编程小结 GDI+ GDI+小例子 关于GDI+ GDI+编程小结
- {Reship}{C#}{GDI+}GDI+画笔,线,区域类型
=================================================================================== This article is ...
- GDI GDI+ 的区别
GDI+是GDI的下一个版本,它进行了很好的改进,并且易用性更好.GDI的一个好处就是你不必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实现了这个优点,也就是说,GDI是一个中低层API,你 ...
- java——String的那边破事
经典的先看下面一段代码,请问最终创建几个对象,分别在哪里? String s0 = new String("luoliang.me"); String s1 = "luo ...
- ssh, maven and eclipse
那些破事
Unix根据该理念keep it simple, keep it stupid.可在j2ee有keep it complex, keep it smart. 所以,我彻底晕菜. 最后能活着把sprin ...
- [日常] 最近的一些破事w...
更新博文一篇以示诈尸(大雾 (其实只是断了个网然后就彻底失踪了一波w...连题解都没法写了QAQ) $ \tiny{诈尸的实际情况是老姚提前走还把十一机房门锁了然而钥匙在联赛的时候就还了于是并不能进去 ...
- Maven 那些破事
deploy 只上传了pom 晚上输命令,打算打包上传到本地库里,然后去服务器上部署新版本 mvn clean package deploy 结果看着mvn的build过程只是上传了pom,去库服务器 ...
- Dll 导出函数那些破事
经常使用VC6的Dependency查看DLL导出函数的名字,会发现有DLL导出函数的名字有时大不相同,导致不同的原因大多是和编译DLL时候指定DLL导出函数的界定符有关系. VC++支持两种语言:即 ...
- SpringData :下划线的那些破事
今天写一个查询语句的时候,报错如下 org.springframework.beans.factory.BeanCreationException: Error creating bean with ...
随机推荐
- Vim技能修炼教程(9) - 缓冲区和标签页
缓冲区 上一节我们学习了窗口相关的命令,其实多窗口的最大功能在于存放多个不同的缓冲区. 文件载入内存之后,我们操作的其实是缓冲区.:write命令就是将缓冲区写回文件的目的. 查看内存中的缓冲区 通过 ...
- [置顶]
如何用PYTHON代码写出音乐
如何用PYTHON代码写出音乐 什么是MIDI 博主本人虽然五音不全,而且唱歌还很难听,但是还是非常喜欢听歌的.我一直在做这样的尝试,就是通过人工智能算法实现机器自动的作词和编曲(在这里预告下,通过深 ...
- linux另一种安装方式
linux中其实没有“安装”的概念:安装就是设下路径,拷贝文件,复制文件,运行下脚本这些(windows也应该如此) 法一.把bin运行路径设成环境变量 法二.ln一下,例如: 解压下载的文件: ta ...
- 【剑指offer】和为s的两个数字
原创博文,转载请注明出处! # 题目 # 思路 首先定义两个指针,第一个指针p指向数组的第一个数字,第二个指针q指向数组的最后一个数字.如果p+q=s,则找到要找的数字:如果p+q<s,则p向后 ...
- linux下导入、导出mysql 数据库命令
一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1.导出数据和表结构:mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql#/usr/lo ...
- 求 LCA 的三种方法
(YYL: LCA 有三种求法, 你们都知道么?) (众神犇: 这哪里来的傻叉...) 1. 树上倍增 对于求 LCA, 最朴素的方法是"让两个点一起往上爬, 直到相遇", &qu ...
- 二次剩余-Cipolla
二次剩余 \(Cipolla\) 算法 概述 大概就是在模 \(p\) 意义下开根号,如求解方程\(x^2\equiv n(mod\ p)\). 这里只考虑 \(p\) 为素数的情况.若 \(p=2\ ...
- Centos7下安装共存版本Python
最近遇到个问题, 本机环境已安装了Python2 已安装的应用依赖于Python2,不能替换原系统的Python环境,但新安装的应用需要依赖于Python3 需要安装两个不同版本Python,解决 ...
- nginx 使用ctx实现数据共享,修改上下文
环境: init_worker_by_lua, set_by_lua, rewrite_by_lua, access_by_lua, content_by_lua, header_filter_by_ ...
- 在linux修改文件夹及其子文件夹的权限。
加入-R 参数,就可以将读写权限传递给子文件夹例如chmod -R 777 /home/mypackage那么mypackage 文件夹和它下面的所有子文件夹的属性都变成了777.777是读.写.执行 ...