社区
进程/线程/DLL
帖子详情
HBITMAP,HICON,HCURSOR句柄的区别???
lianglp
2004-05-08 09:57:59
有谁知???
...全文
236
5
打赏
收藏
HBITMAP,HICON,HCURSOR句柄的区别???
有谁知???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhangnanonnet
2004-05-08
打赏
举报
回复
指向的结构不同
cvsuser
2004-05-08
打赏
举报
回复
学习中·
薛定谔之死猫
2004-05-08
打赏
举报
回复
学习
zhangnanonnet
2004-05-08
打赏
举报
回复
nice question....
FengYuanMSFT
2004-05-08
打赏
举报
回复
HBITMAP is a GDI handle.
HICON and HCURSOR are not GDI handles. They are USER handles.
仿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.h
Cursor
= AfxGetApp()->LoadStandard
Cursor
(IDC_ARROW); wndcls.hbrBackground = NULL; // no background wndcls.lpszMenuName = NULL; // no manu application wndcls.lpszClassName = WC_FADEWND; if (!AfxRegisterClass(&wndcls)) AfxThrowResourceException(); } m_h
Bitmap
= NULL; m_hNew
Bitmap
= NULL; m_pWndLock = NULL; } CMyFade::~CMyFade() { if (m_h
Bitmap
) { DeleteObject(m_h
Bitmap
); m_h
Bitmap
= NULL; } if (m_hNew
Bitmap
) { DeleteObject(m_hNew
Bitmap
); m_hNew
Bitmap
= 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, CRect(0, 0, 0, 0)); } } } void CMyFade::OnDraw(CDC* pDC) { CRect rc; GetWindowRect(rc); HDC hbmDC=CreateCompatibleDC(pDC->GetSafeHdc()); H
BITMAP
hOldbmp=(H
BITMAP
)::SelectObject(hbmDC, m_hNew
Bitmap
); // 将屏幕位图再输入到屏幕上去 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); } H
BITMAP
CMyFade::CopyScreenTo
Bitmap
(LPRECT lpRect) { HDC hScrDC, hMemDC; // screen DC and memory DC int nX, nY, nX2, nY2; // coordinates of rectangle to grab int nWidth, nHeight; // DIB width and height int xScrn, yScrn; // screen resolution HGDIOBJ hOld
Bitmap
, h
Bitmap
; if (IsRectEmpty(lpRect)) return NULL; hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); hMemDC = CreateCompatibleDC(hScrDC); xScrn = GetDeviceCaps(hScrDC, HORZRES); yScrn = GetDeviceCaps(hScrDC, VERTRES); nX = lpRect->left; nY = lpRect->top; nX2 = lpRect->right; nY2 = lpRect->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; h
Bitmap
= CreateCompatible
Bitmap
(hScrDC, nWidth, nHeight); hOld
Bitmap
= SelectObject(hMemDC, h
Bitmap
); // 将屏幕输入到内存DC里面去,再通过SelectObject到位图
句柄
里面 BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY); // 将刚刚得到到的屏幕位图置换出
句柄
h
Bitmap
=SelectObject(hMemDC, hOld
Bitmap
); DeleteDC(hScrDC); DeleteDC(hMemDC); return (H
BITMAP
)h
Bitmap
; } BOOL CMyFade::Create(CWnd *pParent, CRect rc) { if (!pParent || !IsWindow(pParent->GetSafeHwnd())) { MessageBox("error1"); return false; } CClientDC dcParent(pParent); if (dcParent.GetDeviceCaps(RASTERCAPS) & RC_PALETTE) { MessageBox("error2"); return FALSE; } GetDesktopWindow()->GetWindowRect(rc); CString szText; GetDesktopWindow()->GetWindowText(szText); if (!CWnd::CreateEx( 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); HRGN hRgn=CreateRectRgn(0, 0, 0, 0); int regiontype=m_pWndLock->GetWindowRgn(hRgn); if(regiontype!=ERROR) { MessageBox("error4"); SetWindowRgn(hRgn, false); } DeleteObject(hRgn); } */ m_h
Bitmap
= CopyScreenTo
Bitmap
(rc); SetTimer(1, 2000, NULL); } ////////////////////////////////////////////////////////////////////////// // 核心函数,将屏幕变暗 H
BITMAP
CMyFade::Fade
Bitmap
(H
BITMAP
hBmp, double dfTrans) { H
BITMAP
hRetBmp = NULL; if (hBmp) { HDC hBufferDC = CreateCompatibleDC(NULL); HGDIOBJ hPrevBufObject = SelectObject(hBufferDC, hBmp); HDC hDirectDC = CreateCompatibleDC(NULL); // DC for working if (hDirectDC) {
BITMAP
bm; GetObject(hBmp, sizeof(bm), &bm);
BITMAP
INFO bmInfo; ZeroMemory(&bmInfo,sizeof(bmInfo)); bmInfo.bmiHeader.biSize = sizeof(
BITMAP
INFOHEADER); bmInfo.bmiHeader.biWidth = bm.bmWidth; bmInfo.bmiHeader.biHeight = bm.bmHeight; bmInfo.bmiHeader.biPlanes = 1; bmInfo.bmiHeader.biBitCount = 32; UINT* ptPixels; H
BITMAP
hDirect
Bitmap
= CreateDIBSection(hDirectDC, (
BITMAP
INFO*)&bmInfo, DIB_RGB_COLORS,(void**)&ptPixels, NULL, 0); if (hDirect
Bitmap
) { // 将hDirect
Bitmap
放入hDirectDC中处理 HGDIOBJ hPrevBufDirObject = SelectObject(hDirectDC, hDirect
Bitmap
); // 当前将原hBmp即屏幕的所有像素写入到hDirectDC // 即需要对像素灰度处理的DC中 BitBlt(hDirectDC,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(hDirectDC,hPrevBufDirObject); hRetBmp = hDirect
Bitmap
; } DeleteDC(hDirectDC); } 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_hNew
Bitmap
) { DeleteObject(m_hNew
Bitmap
); m_hNew
Bitmap
= NULL; } m_hNew
Bitmap
= Fade
Bitmap
(m_h
Bitmap
,(double)i); OnDraw(&dc); DWORD dwEndCount = timeGetTime(); // tick counter in milliseconds }
Windows编程1.5:
句柄
为什么本期是1.5?而不是二? 今天我将会为将来的2作铺垫,因为本期将谈到的是一个非常重要的东西一一
句柄
句柄
有什么重要的吗? 那可是的!
句柄
是非常重要的东西,没有他我们的头文件windows.h根本没有办法运作! 话不多说,我们进入正题吧!
句柄
HINSTANCE 应用程序实例
句柄
HWND 窗口
句柄
H
CURSOR
鼠标
句柄
HICON
图标
句柄
H
BITMAP
位图
句柄
其实主要的
句柄
...
常用
句柄
类型及其说明
句柄
类型 说明 HWND 窗口
句柄
HINSTANCE 当前实列
句柄
H
CURSOR
光标
句柄
HFONT 字体
句柄
HPEN 画笔
句柄
HBRUSH 画刷
句柄
HDC 设备环境
句柄
H
BITMAP
位图
句柄
HICON
图标
句柄
HMENU 菜单
句柄
HFILE 文件
句柄
...
句柄
类型及分类
HWND:窗口
句柄
HINSTANCE:当前实列
句柄
,代表应用程序载入的模块,win32系统下通常是被载入模块的线性地址。 H
CURSOR
:光标
句柄
HFONT:字体
句柄
HPEN:画笔
句柄
HBRUSH:画刷
句柄
HDC:设备环境
句柄
H
BITMAP
:位图
句柄
HICON
:图标
句柄
HMENU:菜单
句柄
HFILE:文件
句柄
...
下MFC中对象、
句柄
、ID之间的
区别
.
Windows程序中,有各种各样的资源(窗口、图标、光标),系统在创建这些资源的时候会为他们分配内存,并返回标识这些资源的标识号,即
句柄
HANDLE(ID)。图标
句柄
(
HICON
)、光标
句柄
(H
CURSOR
)、画刷
句柄
(HBRUSH)。 为什么有个窗口对象还要窗口
句柄
呢?还有什么线程
句柄
,甚至还有控件ID和进程ID呢?MFC中的对象,比如应用程序对象,视图对象等,是对象就会占用
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章