社区
新手乐园
帖子详情
HRGN hRgn = CreateRectRgn(0, 0, 0, 0); GetWindowRgn(hRgn);//为什么这样获取的就是按钮的区域????
microCY.J
2019-05-25 03:19:22
HRGN hRgn = CreateRectRgn(0, 0, 0, 0); GetWindowRgn(hRgn);//为什么这样获取的就是按钮的区域????
...全文
10
回复
打赏
收藏
HRGN hRgn = CreateRectRgn(0, 0, 0, 0); GetWindowRgn(hRgn);//为什么这样获取的就是按钮的区域????
HRGN hRgn = CreateRectRgn(0, 0, 0, 0); GetWindowRgn(hRgn);//为什么这样获取的就是按钮的区域????
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
仿windows关机功能界面
转载同事的测试例子,也许大家可以看看 // MyFade.cpp : implementation file // #include "stdafx.h" #include "MyFade.h" #pragma warning(disable: 4201) #include
#pragma comment(lib,"winmm.lib") #pragma warning(default: 4201) #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define WC_FADEWND _T("FadeWnd") ///////////////////////////////////////////////////////////////////////////// // CMyFade CMyFade::CMyFade(CWnd* pParent) { // register the window WNDCLASS wndcls; HINSTANCE hInst = AfxGetInstanceHandle(); if (!(::GetClassInfo(hInst, WC_FADEWND, &wndcls))) { // otherwise we need to register a new class wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW; wndcls.lpfnWndProc = ::DefWindowProc; wndcls.cbClsExtra = 0; wndcls.cbWndExtra = 0; wndcls.hInstance = hInst; wndcls.hIcon = NULL; // no application icon wndcls.hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW); wndcls.hbrBackground = NULL; // no background wndcls.lpszMenuName = NULL; // no manu application wndcls.lpszClassName = WC_FADEWND; if (!AfxRegisterClass(&wndcls)) AfxThrowResourceException(); } m_hBitmap = NULL; m_hNewBitmap = NULL; m_pWndLock = NULL; } CMyFade::~CMyFade() { if (m_hBitmap) { DeleteObject(m_hBitmap); m_hBitmap = NULL; } if (m_hNewBitmap) { DeleteObject(m_hNewBitmap); m_hNewBitmap = NULL; } if (m_pWndLock) { m_pWndLock->SetFocus(); } } BEGIN_MESSAGE_MAP(CMyFade, CWnd) //{{AFX_MSG_MAP(CMyFade) ON_WM_PAINT() ON_WM_TIMER() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMyFade message handlers void CMyFade::FadeScreen(CWnd *pParent) { if(pParent) { CMyFade *pFade=new CMyFade(pParent); if(pFade) { pFade->
Create
(pParent, C
Rect
(0, 0, 0, 0)); } } } void CMyFade::OnDraw(CDC* pDC) { C
Rect
rc; GetWindow
Rect
(rc); HDC hbmDC=
Create
CompatibleDC(pDC->GetSafeHdc()); HBITMAP hOldbmp=(HBITMAP)::SelectObject(hbmDC, m_hNewBitmap); // 将屏幕位图再输入到屏幕上去 BitBlt(pDC->GetSafeHdc(), 0, 0, rc.Width(), rc.Height(), hbmDC, 0, 0, SRCCOPY); SelectObject(hbmDC, hOldbmp); DeleteObject(hbmDC); } void CMyFade::OnPaint() { CPaintDC dc(this); OnDraw(&dc); } HBITMAP CMyFade::CopyScreenToBitmap(LP
RECT
lp
Rect
) { HDC hScrDC, hMemDC; // screen DC and memory DC int nX, nY, nX2, nY2; // coordinates of
rect
angle to grab int nWidth, nHeight; // DIB width and height int xScrn, yScrn; // screen resolution HGDIOBJ hOldBitmap, hBitmap; if (Is
Rect
Empty(lp
Rect
)) return NULL; hScrDC =
Create
DC("DISPLAY", NULL, NULL, NULL); hMemDC =
Create
CompatibleDC(hScrDC); xScrn = GetDeviceCaps(hScrDC, HORZRES); yScrn = GetDeviceCaps(hScrDC, VERTRES); nX = lp
Rect
->left; nY = lp
Rect
->top; nX2 = lp
Rect
->right; nY2 = lp
Rect
->bottom; if (nX < 0) nX = 0; if (nY < 0) nY = 0; if (nX2 > xScrn) nX2 = xScrn; if (nY2 > yScrn) nY2 = yScrn; nWidth = nX2 - nX; nHeight = nY2 - nY; hBitmap =
Create
CompatibleBitmap(hScrDC, nWidth, nHeight); hOldBitmap = SelectObject(hMemDC, hBitmap); // 将屏幕输入到内存DC里面去,再通过SelectObject到位图句柄里面 BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY); // 将刚刚得到到的屏幕位图置换出句柄 hBitmap=SelectObject(hMemDC, hOldBitmap); DeleteDC(hScrDC); DeleteDC(hMemDC); return (HBITMAP)hBitmap; } BOOL CMyFade::
Create
(CWnd *pParent, C
Rect
rc) { if (!pParent || !IsWindow(pParent->GetSafeHwnd())) { MessageBox("error1"); return false; } CClientDC dcParent(pParent); if (dcParent.GetDeviceCaps(RASTERCAPS) & RC_PALETTE) { MessageBox("error2"); return FALSE; } GetDesktopWindow()->GetWindow
Rect
(rc); CString szText; GetDesktopWindow()->GetWindowText(szText); if (!CWnd::
Create
Ex( 0, WC_FADEWND, szText, WS_POPUP | WS_CHILD | WS_VISIBLE, rc, pParent, NULL, NULL)) { MessageBox("error3"); return FALSE; } /* if(pParent!=GetDesktopWindow()) { m_pWndLock=pParent; m_pWndLock->EnableWindow(false);
H
R
GN
h
R
gn
=
Create
Rect
R
gn
(0, 0, 0, 0); int regiontype=m_pWndLock->GetWindow
R
gn
(
h
R
gn
); if(regiontype!=ERROR) { MessageBox("error4"); SetWindow
R
gn
(
h
R
gn
, false); } DeleteObject(
h
R
gn
); } */ m_hBitmap = CopyScreenToBitmap(rc); SetTimer(1, 2000, NULL); } ////////////////////////////////////////////////////////////////////////// // 核心函数,将屏幕变暗 HBITMAP CMyFade::FadeBitmap(HBITMAP hBmp, double dfTrans) { HBITMAP hRetBmp = NULL; if (hBmp) { HDC hBufferDC =
Create
CompatibleDC(NULL); HGDIOBJ hPrevBufObject = SelectObject(hBufferDC, hBmp); HDC hDi
rect
DC =
Create
CompatibleDC(NULL); // DC for working if (hDi
rect
DC) { BITMAP bm; GetObject(hBmp, sizeof(bm), &bm); BITMAPINFO bmInfo; ZeroMemory(&bmInfo,sizeof(bmInfo)); bmInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmInfo.bmiHeader.biWidth = bm.bmWidth; bmInfo.bmiHeader.biHeight = bm.bmHeight; bmInfo.bmiHeader.biPlanes = 1; bmInfo.bmiHeader.biBitCount = 32; UINT* ptPixels; HBITMAP hDi
rect
Bitmap =
Create
DIBSection(hDi
rect
DC, (BITMAPINFO*)&bmInfo, DIB_RGB_COLORS,(void**)&ptPixels, NULL, 0); if (hDi
rect
Bitmap) { // 将hDi
rect
Bitmap放入hDi
rect
DC中处理 HGDIOBJ hPrevBufDirObject = SelectObject(hDi
rect
DC, hDi
rect
Bitmap); // 当前将原hBmp即屏幕的所有像素写入到hDi
rect
DC // 即需要对像素灰度处理的DC中 BitBlt(hDi
rect
DC,0,0,bm.bmWidth,bm.bmHeight,hBufferDC,0,0,SRCCOPY); int iAlpha = (int)(255.0 * dfTrans / 100.0); int nSize = bm.bmWidth * bm.bmHeight; for (int i=0; i
> 16; int iSrcG = ptPixels[i] & 0x0000ff00 >> 8; int iSrcB = ptPixels[i] & 0x000000ff; int iGrey = (iSrcR * 54 + iSrcG * 182 + iSrcB * 19) >> 8; COLORREF Col =iGrey ; //RGB(iGrey, iGrey, iGrey) ; ptPixels[i] = RGB( (GetBValue( Col ) * iAlpha + iSrcB * (255 - iAlpha)) >> 8, (GetGValue( Col ) * iAlpha + iSrcG * (255 - iAlpha)) >> 8, (GetRValue( Col ) * iAlpha + iSrcR * (255 - iAlpha)) >> 8 ); } SelectObject(hDi
rect
DC,hPrevBufDirObject); hRetBmp = hDi
rect
Bitmap; } DeleteDC(hDi
rect
DC); } SelectObject(hBufferDC, hPrevBufObject); DeleteDC(hBufferDC); } return hRetBmp; } static i=0; void CMyFade::OnTimer(UINT nIDEvent) { CWnd::OnTimer(nIDEvent); CClientDC dc(this); i+=2; if(i>100) { KillTimer(1); return; } DWORD dwStartCount = timeGetTime(); if(m_hNewBitmap) { DeleteObject(m_hNewBitmap); m_hNewBitmap = NULL; } m_hNewBitmap = FadeBitmap(m_hBitmap,(double)i); OnDraw(&dc); DWORD dwEndCount = timeGetTime(); // tick counter in milliseconds }
消失掉的鼠标
今天在看别人写的代码,其中用到一个
按钮
类,该类的一个效果是在鼠标移动到该窗口时,鼠标形状发生变化,但是实际运行时,发现移动到该窗口时鼠标不见了,于是查看源代码,表面上看OnMouseMove没有问题,
H
R
GN
h
R
gn
=
Create
Rect
R
gn
(0, 0, 0, 0); GetWindow
R
gn
(
h
R
gn
); if ( PtInRegion(
h
R
gn
, point
DuiLib WndShadow添加阴影效果的问题
在最新版本的Duilib中,使用CWndShadow添加窗口阴影会无效,需要修改CWndShadow类中MakeShadow函数中的一下内容方能生效: // Get the region of parent window,
H
R
GN
hParent
R
gn
=
Create
Rect
R
gn
(0, 0, rcParent->right - rcParent->left, rcPar...
MFC实战-自定义
按钮
控件
MFC实战-自定义
按钮
控件 .h头文件设计 #include"stdafx.h" class CMybutton:public CButton { public: CMybutton(); virtual ~CMybutton(); BOOL
Create
(LPCTSTR lpszCaption,DWORD dwStyle,const CPoint point,const
H
R
GN
h
R
gn
...
笔记GDI+
SelectObject() //该函数选择一个对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。
Create
Rect
R
gn
() //创建一个矩形
区域
,存储在C
R
gn
对象 GetWindow
R
gn
() //获得一份窗口
区域
的一个窗口
Create
SolidBrush() //创建一个已指定颜色的画刷 Frame
R
gn
() //用指定刷子 围绕指定
区域
画一个外框
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章