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 ...
随机推荐
- 圣诞节为大家推荐一些学习java书籍
怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序员经常会问到的问题 初级 ...
- spi总结
SPI的四种模式 SPI的相位(CPHA)和极性(CPOL)分别可以为0或1,对应的4种组合构成了SPI的4种模式(mode) Mode 0:CPOL = 0,CPHA = 0 Mode 1:CPOL ...
- php开发中一些前端知识杂总
推荐几个jqyuey插件的好地方 http://jqueryui.com/ http://www.jq22.com/ 背景: 服务端采用ci3.0框架,twig作为模板嵌套. twig模板手册: ht ...
- ubuntu 添加应用到Dash启动器
打开终端输入 $sudo vim /usr/share/applications/name.desktop name是你的程序标识名称 在打开的编辑器中添加以下内容,这里以配置NetBeans为例: ...
- Base64编码的 换行 转义
用Base64编码的时候如果出现\n 之类的字符,java中转义. 当字符串过长(一般超过76)时会自动在中间加一个换行符,字符串最后也会加一个换行符.导致和其他模块对接时结果不一致. 解决方法:将 ...
- Ubuntu和win双系统删除ubuntu开机出错
Ubuntu和win双系统删除ubuntu开机出错问题. 报错error:unknown filesystem. grub rescue>_ 很简单: 进入pe 打开diskgenius 选择你 ...
- HDU1556 线扫
昨天睡得太晚,今天又在看新算法,明天事情也多,烦,所以今天刷刷水题就过去了. 叫我用线段树,我反而搞不来 #include<cstdio> #include<cstdlib> ...
- bzoj 2002 Bounce 弹飞绵羊
bzoj 2002 Bounce 弹飞绵羊 设一个虚拟节点表示被弹飞,则每个点的后继点是唯一确定的,每个点向它的后继点连边,就形成了一颗树. 询问就是问某个节点到虚拟节点的路径长度,修改就删除原来向后 ...
- BZOJ2753 SCOI2012 滑雪与时间胶囊 【最小生成树】*
BZOJ2753 SCOI2012 滑雪与时间胶囊 Description a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有 ...
- 船长带你看书——《selenium2 python 自动化测试实战》(2)浏览器操作
浏览器操作 # coding: utf-8 from selenium import webdriver from time import sleep driver = webdriver.Firef ...