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 ...
随机推荐
- 解决在django中应用keras模型时出现的ValueError("Tensor %s is not an element of this graph." % obj)问题
用keras训练好模型,再在django初始化加载模型,这个过程没有问题,但是在调用到模型执行model.predict()的时候就报错: raise ValueError("Tensor ...
- NuGet 本地服务器 公司组件库搭建 上传下载操作 模块化灵活设计
新年第一更,关于如何搭建NuGet的本地服务器,以及部署IIS,以此搭建公司自己的组件仓库,方便所有的组件更新,管理,测试等等操作. 关于如何在NuGet中下载指定的组件,参考这篇文章:http:// ...
- NSLog 打印出方法函数,行数,内容
#if DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,"\nfunction:%s line:%d content:%s\n", ...
- UESTC794 Balloon Game 博弈
题目链接:Balloon Game 题目大意: Alice 和 Bob进行一个博弈游戏,他们要摆放气球,保证颜色一样的气球全部相邻出现,现在在一个序列中气球有一部分已经摆放,还有一些未摆放,用&quo ...
- BZOJ4236 JOIOJI 【map】
BZOJ4236 JOIOJI Description JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI ...
- BZOJ3932 CQOI2015 任务查询系统 【主席树】
BZOJ3932 CQOI2015 任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei, ...
- 携程阿波罗(Apollo)配置中心
携程阿波罗(Apollo) https://www.cnblogs.com/xiaxiaolu/p/10025597.html 一.瞎扯点什么 1.1 阿波罗 阿波罗是希腊神话中的光明之神.文艺之 ...
- RabbitMQ介绍及windows下安装使用
RebbitMQ介绍 RabbitMQ是一个由 Erlang (一种通用的面向并发的编程语言)开发的AMQP(Advanced Message Queue )的开源实现,Rabbit MQ 是建立在E ...
- REST服务开发实战【转】
原文:http://kb.cnblogs.com/page/91827/ REST介绍 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(htt ...
- vs2013 快捷键
//////////////// 编辑: ctrl+-(shift+ctrl+-):移动光标到上次位置或相反,比如定位一个函数,转到函数定义后想回到函数使用处,则用ctrl+-,若又想回到函数 ...