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 ...
随机推荐
- [置顶]
曙光到来,我的新书《Android进阶之光》已出版
独立博客版本请点击这里 由来 2016年我开始建立了自己的知识体系,所有的文章都是围绕着这个体系来写,随着这个体系的慢慢成长,开始有很多出版社联系我写书,因为比较看好电子工业出版社,就顺理成章的开始了 ...
- 解决在django中应用keras模型时出现的ValueError("Tensor %s is not an element of this graph." % obj)问题
用keras训练好模型,再在django初始化加载模型,这个过程没有问题,但是在调用到模型执行model.predict()的时候就报错: raise ValueError("Tensor ...
- js之自定义右键菜单
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 关于python机器学习常用算法的例子
Home Installation Documentation Examples Previous An introduction ... This documentation is for ...
- SQL夯实基础(九)MySQL联接查询算法
书接上文<SQL夯实基础(八):联接运算符算法归类>. 这里先解释下EXPLAIN 结果中,第一行出现的表就是驱动表(Important!). 对驱动表可以直接排序,对非驱动表(的字段排序 ...
- 接口测试基础——第7篇 简单的Python知识普及(二)之装饰器
今天我们来学习python里面的“装饰器” 1.我在函数test运行前想先打印一些内容怎么办? def func(param): print u"打印的内容" para ...
- GridView合并表头多重表头
后台代码: using System; using System.Data; using System.Configuration; using System.Web; using System.We ...
- fopen()和fclose()
1.fopen()函数的用法fopen函数用于打开文件, 其调用格式为:FILE *fopen(char *filename, *type);fopen()函数中第一个形式参数表示文件名, 可以包含路 ...
- 理解AI的角度
<经济学人>去年出了一期很经典的封面,封面里将全球各大高科技平台企业如谷歌.亚马逊之许描绘成正在采油的钻井,寓意很明显,在数字经济时代,大平台正在开采数字化的石油——大数据,而开采出来的大 ...
- java nio和bio
理解同步/异步,阻塞/非阻塞:https://juejin.im/entry/598da7d16fb9a03c42431ed3 2:http://qindongliang.iteye.com/blog ...