社区
界面
帖子详情
加载位图后,怎么能使双击它产生消息,用那个函数呀
shicheng521
2004-05-10 09:21:36
加载位图后,怎么样才能使双击它产生消息,处理特定的事件。
...全文
95
14
打赏
收藏
加载位图后,怎么能使双击它产生消息,用那个函数呀
加载位图后,怎么样才能使双击它产生消息,处理特定的事件。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shicheng521
2004-05-13
打赏
举报
回复
保存知道了,那怎么在客户区移动位图呀
lincoder666
2004-05-12
打赏
举报
回复
看看《VC技术内幕》
hello312
2004-05-12
打赏
举报
回复
进来学习
酒红绿叶
2004-05-12
打赏
举报
回复
添加虚函数,
鼠标双击的,
不就可以了么,
void ~~~~~::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnLButtonDblClk(nFlags, point);
}
你双击就调用它,在里面添加你的函数就行了把!
countryboy
2004-05-12
打赏
举报
回复
//********************************************************************************
//* 名称:DDBToDIB
//* 功能:设备相关转换为设备无关位图
//********************************************************************************
HANDLE CTestView3::DDBToDIB( CBitmap& bitmap, DWORD dwCompression /* = BI_RGB */)
{
BITMAP bm;
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;
DWORD dwLen;
HANDLE hDIB;
HANDLE handle;
HDC hDC;
HPALETTE hPal;
CWindowDC dc(this);
CPalette pal;
//如果支持调色板的话,则建立它
if( dc.GetDeviceCaps( RASTERCAPS ) & RC_PALETTE )
{
UINT nSize = sizeof(LOGPALETTE) + ( sizeof(PALETTEENTRY) * 256 );
LOGPALETTE* pLP = (LOGPALETTE*)new BYTE[nSize];
pLP->palVersion = 0x300;
pLP->palNumEntries = (unsigned short)GetSystemPaletteEntries( dc, 0, 255,
pLP->palPalEntry );
pal.CreatePalette( pLP );
//释放
delete[] pLP;
}
ASSERT( bitmap.GetSafeHandle() );
//不支持BI_BITFIELDS类型
if( dwCompression == BI_BITFIELDS )
return NULL;
//如果调色板为空,则用默认调色板
hPal = (HPALETTE) pal.GetSafeHandle();
if (hPal==NULL)
hPal = (HPALETTE) GetStockObject(DEFAULT_PALETTE);
//获取位图信息
bitmap.GetObject(sizeof(bm),(LPSTR)&bm);
//初始化位图信息头
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bm.bmWidth;
bi.biHeight = bm.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = (unsigned short)(bm.bmPlanes * bm.bmBitsPixel) ;
bi.biCompression = dwCompression;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
//计算信息头及颜色表大小
int nColors = 0;
if(bi.biBitCount <= 8)
{
nColors = (1 << bi.biBitCount);
}
dwLen = bi.biSize + nColors * sizeof(RGBQUAD);
hDC = ::GetDC(NULL);
hPal = SelectPalette(hDC,hPal,FALSE);
RealizePalette(hDC);
//为信息头及颜色表分配内存
hDIB = GlobalAlloc(GMEM_FIXED,dwLen);
if (!hDIB){
SelectPalette(hDC,hPal,FALSE);
::ReleaseDC(NULL,hDC);
return NULL;
}
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
*lpbi = bi;
//调用 GetDIBits 计算图像大小
GetDIBits(hDC, (HBITMAP)bitmap.GetSafeHandle(), 0L, (DWORD)bi.biHeight,
(LPBYTE)NULL, (LPBITMAPINFO)lpbi, (DWORD)DIB_RGB_COLORS);
bi = *lpbi;
//图像的每一行都对齐(32bit)边界
if (bi.biSizeImage == 0){
bi.biSizeImage = ((((bi.biWidth * bi.biBitCount) + 31) & ~31) / 8)
* bi.biHeight;
if (dwCompression != BI_RGB)
bi.biSizeImage = (bi.biSizeImage * 3) / 2;
}
//重新分配内存大小,以便放下所有数据
dwLen += bi.biSizeImage;
handle = GlobalReAlloc(hDIB, dwLen, GMEM_MOVEABLE) ;
if (handle != NULL)
hDIB = handle;
else
{
GlobalFree(hDIB);
//重选原始调色板
SelectPalette(hDC,hPal,FALSE);
::ReleaseDC(NULL,hDC);
return NULL;
}
//获取位图数据
lpbi = (LPBITMAPINFOHEADER)hDIB;
//最终获得的DIB
BOOL bGotBits = GetDIBits( hDC, (HBITMAP)bitmap.GetSafeHandle(),
0L, //扫描行起始处
(DWORD)bi.biHeight, //扫描行数
(LPBYTE)lpbi //位图数据地址
+ (bi.biSize + nColors * sizeof(RGBQUAD)),
(LPBITMAPINFO)lpbi, //位图信息地址
(DWORD)DIB_RGB_COLORS); //颜色板使用RGB
if( !bGotBits )
{
GlobalFree(hDIB);
SelectPalette(hDC,hPal,FALSE);
::ReleaseDC(NULL,hDC);
return NULL;
}
SelectPalette(hDC,hPal,FALSE);
::ReleaseDC(NULL,hDC);
return hDIB;
}
BOOL CTestView3::SaveBitmapToFile(HBITMAP hBitmap , CString lpFileName)
{
HDC hDC; //设备描述表
int iBits; //当前显示分辨率下每个像素所占字节数
WORD wBitCount; //位图中每个像素所占字节数
DWORD dwPaletteSize=0, //定义调色板大小, 位图中像素字节大小 ,位图文件大小 , 写入文件字节数
dwBmBitsSize,
dwDIBSize, dwWritten;
BITMAP Bitmap;
BITMAPFILEHEADER bmfHdr; //位图属性结构
BITMAPINFOHEADER bi; //位图文件头结构
LPBITMAPINFOHEADER lpbi; //位图信息头结构
HANDLE fh, hDib, hPal,hOldPal=NULL; //指向位图信息头结构,定义文件,分配内存句柄,调色板句柄
//计算位图文件每个像素所占字节数
hDC = CreateDC("DISPLAY",NULL,NULL,NULL);
iBits = GetDeviceCaps(hDC, BITSPIXEL) *
GetDeviceCaps(hDC, PLANES);
DeleteDC(hDC);
if (iBits <= 1)
wBitCount = 1;
else if (iBits <= 4)
wBitCount = 4;
else if (iBits <= 8)
wBitCount = 8;
else if (iBits <= 24)
wBitCount = 24;
//计算调色板大小
if (wBitCount <= 8)
dwPaletteSize = (1 << wBitCount) *sizeof(RGBQUAD);
//设置位图信息头结构
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = wBitCount;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
dwBmBitsSize = ((Bitmap.bmWidth *
wBitCount+31)/32)* 4
*Bitmap.bmHeight ;
//为位图内容分配内存
hDib = GlobalAlloc(GHND,dwBmBitsSize+
dwPaletteSize+sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi = bi;
// 处理调色板
hPal = GetStockObject(DEFAULT_PALETTE);
if (hPal)
{
hDC = ::GetDC(NULL);
hOldPal = SelectPalette(hDC, (HPALETTE)hPal, FALSE);
RealizePalette(hDC);
}
// 获取该调色板下新的像素值
GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight,
(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)+dwPaletteSize,
(LPBITMAPINFO)lpbi, DIB_RGB_COLORS);
//恢复调色板
if (hOldPal)
{
SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);
RealizePalette(hDC);
::ReleaseDC(NULL, hDC);
}
//创建位图文件
fh = CreateFile(lpFileName, GENERIC_WRITE,
0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (fh == INVALID_HANDLE_VALUE)
return FALSE;
// 设置位图文件头
bmfHdr.bfType = 0x4D42; // "BM"
dwDIBSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize;
bmfHdr.bfSize = dwDIBSize;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)
+ (DWORD)sizeof(BITMAPINFOHEADER)
+ dwPaletteSize;
// 写入位图文件头
WriteFile(fh, (LPSTR)&bmfHdr, sizeof
(BITMAPFILEHEADER), &dwWritten, NULL);
// 写入位图文件其余内容
WriteFile(fh, (LPSTR)lpbi, dwDIBSize,
&dwWritten, NULL);
//消除内存分配
GlobalUnlock(hDib);
GlobalFree(hDib);
CloseHandle(fh);
return TRUE;
}
countryboy
2004-05-12
打赏
举报
回复
保存在客户区显示的的位图例子~~!!
void CTestView::OnSaveBMP()
{
// TODO: Add your control notification handler code here
CString strFileName;
CString szFilters="位图文件(*.bmp)|*.bmp|";
CString strText;
strText = "曲线";
CFileDialog dlg(FALSE, _T("*.bmp"), strText, OFN_HIDEREADONLY|OFN_CREATEPROMPT, szFilters);
dlg.m_ofn.lpstrTitle="保存为位图";
if(dlg.DoModal() == IDCANCEL)
return;
strFileName = dlg.GetPathName();
//获取选中图像窗口的位图句柄
CDC* pDC=new CDC;
CWnd* pWnd = GetDlgItem(IDC_BITMAP);// 获取绘制坐标的文本框
CClientDC dc(&m_bitmap);
HDC hdc;
hdc=dc;
pDC->Attach(hdc);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap bm;
CRect rect;
GetDlgItem(IDC_BITMAP)->GetClientRect(&rect);
CSize size(rect.Width(), rect.Height());
bm.CreateCompatibleBitmap(&dc, size.cx, size.cy);
CBitmap * oldbm = memDC.SelectObject(&bm);
memDC.BitBlt(0, 0, size.cx, size.cy, &dc, 0, 0, SRCCOPY);
//保存为指定位图文件
if(SaveBitmapToFile((HBITMAP)bm.m_hObject,strFileName))
AfxMessageBox("位图保存成功!");
else
AfxMessageBox("位图保存失败!");
//恢复原始环境
memDC.SelectObject(oldbm);
bm.Detach();
}
shicheng521
2004-05-12
打赏
举报
回复
还有怎么保存在客户区显示的的位图呀
shicheng521
2004-05-12
打赏
举报
回复
这个问题我会了,谢谢各位了.可是怎么移动这个位图呀
ygzdev
2004-05-11
打赏
举报
回复
响应WM_LBUTTONDBCLK消息,判断该点下面的是不是你的位图,再做相应处理
shicheng521
2004-05-11
打赏
举报
回复
大家怎么不说话了
shicheng521
2004-05-10
打赏
举报
回复
在客户区,有没有源代码,给看一下
ygzdev
2004-05-10
打赏
举报
回复
或者你就响应对话框的WM_LBUTTONDBCLK消息,判断该点下面的是不是你的位图,再出相应处理
榕树_
2004-05-10
打赏
举报
回复
如果是在客户区的话就要检测鼠标位置响应双击消息了
ygzdev
2004-05-10
打赏
举报
回复
你是用什么加栽的?如果是Picture控件,需要指定其notify消息
dll动态库
函数
查询Depends
查看动态库dll
函数
查看动态库dll
函数
查看动态库dll
函数
查看动态库dll
函数
window32 API大全 win32编程
作为Microsoft 32位平台的应用程序编程接口,Win32 API是从事Windows应用程序开发所必备的。本书首先对Win32 API
函数
做完整的概述;然后收录五大类
函数
:窗口管理、图形设备接口、系统服务、国际特性以及网络服务;在附录部分,讲解如何在Visual Basic和Delphi中对其调用。 本书是从事Windows应用程序开发的软件工程师的必备参考手册。 Win32 API作为 Microsoft 32位平台(包括:Windows 9x,Windows NT3.1/4.0/5.0,WindowsCE)的应用程序编程接口,它是构筑所有32位Windows平台的基石,所有在Windows平台上运行的应用程序都可以调用这些
函数
。 从事Windows应用程序开发,离不开对Win32 API
函数
的调用。只有充分理解和利用API
函数
,才能深入到Windows的内部,充分挖掘系统提供的强大功能和灵活性。 近年来,随着Microsoft 32位平台的版本升级, Win32 API
函数
的构成、功能与调用方式都有很大的发展变化,然而,国内很少有相关的新版资料出版。为了满足广大开发人员的迫切需求,我们经过认真收集、整理素材,组织编写了这本与各种Microsoft 32位平台最新版本同步的Win32 API参考手册。 全书收录了五大类
函数
:窗口管理、图形设备接口、系统服务、国际特性以及网络服务。所有
函数
均附有功能说明、参数说明、返回值说明、备注以及引用说明。另外,在本书的第一章,我们对WiN32 API
函数
作了完整的概述;在附录部分,讲解了如何在Visual Basic和Delphi中对其调用。 由于篇幅较大,涉及技术内容广泛,加之时间仓促,书中难免存在不少错误或疏漏,希望广大读者给与批评指正。 在Windows程序设计领域处于发展初期时,Windows程序员可使用的编程工具唯有API
函数
。这些
函数
在程序员手中犹如"积木块"一样,可搭建出各种界面丰富、功能灵活的应用程序。不过,由于这些
函数
结构复杂,所以往往难以理解,而且容易误用。 随着软件技术的不断发展,在Windows平台上出现了很多优秀的可视化编程环境,程序员可以采用"所见即所得"的编程方式来开发具有精美用户界面和功能的应用程序。这些可视化编程环境操作简便、界面友好,比如:Visual C++,Delphi,Visual Basic等等。在这些工具中提供了大量的类库和各种控件,它们替代了API的神秘功能。事实上,这些类库和控件都是构筑在Windows API的基础上的,但它们使用方便,加速了Windows应用程序的开发,所以受到程序员的普遍采用。有了这些类库和控件,程序员们便可以把主要精力放在整体功能的设计上,而不必过于关注具体细节。不过,这也导致了非常多的程序员在类库面前"固步自封",对下层API
函数
的强大功能一无所知。 实际上。程序员要想开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用API
函数
。虽然类库和控件使应用程序的开发容易得多,但它们只提供Microsoft Windows的一般功能,对于一些比较复杂和特殊的功能来说,单使用类库和控件是难以实现的,必须直接使用API
函数
来编写。API
函数
是构筑整个Windows框架的基石,只有充分理解和利用API
函数
,才能深入到Windows的内部,充分发挥各种32位平台的强大功能和灵活性,才能成功地扩展和突破类库、控件和可视开发环境的限制。 Win32 API即为Microsoft 32位平台的应用程序编程接口(Application Programming Interface)。所有在Win32平台上运行的应用程序都可以调用这些
函数
。 使用Win32 API,应用程序可以充分挖掘Windows的32位操作系统的潜力。 Mircrosoft的所有32位平台都支持统一的API,包括
函数
、结构、
消息
、宏及接口。使用 Win32 API不但可以开发出在各种平台上都能成功运行的应用程序,而且也可以充分利用每个平台特有的功能和属性。 在具体编程时,程序实现方式的差异依赖于相应平台的底层功能的不同。最显著的差异是某些
函数
只能在更强大的平台上实现其功能。例如,安全
函数
只能在Windows NT操作系统下使用。另外一些主要差别就是系统限制,比如值的范围约束,或
函数
可管理的项目个数等等。 标准Win32 API
函数
可以分为以下几类: 窗口管理 窗口通用控制 Shell特性 图形设备接口 系统服务 国际特性 网络服务 在下面各节中,我们分别介绍这7种类型的API
函数
。 窗口管理
函数
向应用程序提供了一些创建和管理用户界面的方法。你可以使用窗口管理
函数
创建和使用窗口来显示输出、提示用户进行输入以及
MFC资源视图对话框
位图
显示图片.docx
VC6.0的MFC单文档基础入门,步骤非常详细,按照步骤必然可以实现。实现了简单的资源视图中的
位图
显示。
任意格式图
加载
在一个MFC的基于对话框类中,点击按钮控件,弹出一个对话框,可以
加载
当前电脑中一张任意格式的图片,图片的格式可以是gif,jpeg,jpg,bmp等
新编windowsAPI
windows api详细介绍,可作为工具查询书,新版中修改了前两章内容!
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章