小弟参照MSDN中的liblook源代码,添加了根据鼠标移动来复制粘贴位图。
liblook源代码的功能包括打开位图,复制,粘贴
代码如下:
void CDibView::OnEditCopy()
{
CDibDoc* pDoc = GetDocument();
// Clean clipboard of contents, and copy the DIB.
if (OpenClipboard())
{
BeginWaitCursor();
EmptyClipboard();
SetClipboardData (CF_DIB, CopyHandle((HANDLE) pDoc->GetHDIB()) );
CloseClipboard();
EndWaitCursor();
}
}void CDibView::OnEditPaste()
{
HDIB hNewDIB = NULL;
if (OpenClipboard())
{
BeginWaitCursor();
hNewDIB = (HDIB) CopyHandle(::GetClipboardData(CF_DIB));
CloseClipboard();
if (hNewDIB != NULL)
{
CDibDoc* pDoc = GetDocument();
pDoc->ReplaceHDIB(hNewDIB); // and free the old DIB
pDoc->InitDIBData(); // set up new size & palette
pDoc->SetModifiedFlag(TRUE); SetScrollSizes(MM_TEXT, pDoc->GetDocSize());
OnDoRealize((WPARAM)m_hWnd,0); // realize the new palette
pDoc->UpdateAllViews(NULL);
}
EndWaitCursor();
}}
-----------------------------------------------------------------------------
以下是我添加的,添加了鼠标左键按下,移动,松开,鼠标右键双击截图功能
void CDibView::OnLButtonDown(UINT nFlags, CPoint point)
{
cp1.x = point.x;
cp1.y = point.y;
state = 1;
CScrollView::OnLButtonDown(nFlags, point);
}void CDibView::OnMouseMove(UINT nFlags, CPoint point)
{
if(nFlags == MK_LBUTTON)
{
cp2.x = point.x;
cp2.y = point.y;
Invalidate();
CView::OnMouseMove(nFlags, point);
}
CScrollView::OnMouseMove(nFlags, point);
}void CDibView::OnLButtonUp(UINT nFlags, CPoint point)
{
state=0;
CScrollView::OnLButtonUp(nFlags, point);
}void CDibView::OnRButtonDblClk(UINT nFlags, CPoint point)
{
state = 0;
Invalidate();
ClientToScreen(&cp1);
ClientToScreen(&cp2);
CRect rc(cp1.x-1,cp1.y-1,cp2.x-1,cp2.y-1);
hBitmap=CopyScreenToBitmap(&rc); if (OpenClipboard())
{
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard(); }
CView::OnRButtonDblClk(nFlags, point);
CScrollView::OnRButtonDblClk(nFlags, point);
}
其中CopyScreenToBitmap函数网上有现成代码。我有再添加了一个功能就是轮廓提取,问题就是:比如,我打开一张256色位图,截取其中一个区域,粘贴,此时轮廓提取功能不能实现,不知是何解?如果将截取下来的区域粘贴到系统自带的画图工具里面,保存起来,再打开,就能实现其轮廓提取功能。
如果不清楚,本人邮箱[email protected],提供源代码。
liblook源代码的功能包括打开位图,复制,粘贴
代码如下:
void CDibView::OnEditCopy()
{
CDibDoc* pDoc = GetDocument();
// Clean clipboard of contents, and copy the DIB.
if (OpenClipboard())
{
BeginWaitCursor();
EmptyClipboard();
SetClipboardData (CF_DIB, CopyHandle((HANDLE) pDoc->GetHDIB()) );
CloseClipboard();
EndWaitCursor();
}
}void CDibView::OnEditPaste()
{
HDIB hNewDIB = NULL;
if (OpenClipboard())
{
BeginWaitCursor();
hNewDIB = (HDIB) CopyHandle(::GetClipboardData(CF_DIB));
CloseClipboard();
if (hNewDIB != NULL)
{
CDibDoc* pDoc = GetDocument();
pDoc->ReplaceHDIB(hNewDIB); // and free the old DIB
pDoc->InitDIBData(); // set up new size & palette
pDoc->SetModifiedFlag(TRUE); SetScrollSizes(MM_TEXT, pDoc->GetDocSize());
OnDoRealize((WPARAM)m_hWnd,0); // realize the new palette
pDoc->UpdateAllViews(NULL);
}
EndWaitCursor();
}}
-----------------------------------------------------------------------------
以下是我添加的,添加了鼠标左键按下,移动,松开,鼠标右键双击截图功能
void CDibView::OnLButtonDown(UINT nFlags, CPoint point)
{
cp1.x = point.x;
cp1.y = point.y;
state = 1;
CScrollView::OnLButtonDown(nFlags, point);
}void CDibView::OnMouseMove(UINT nFlags, CPoint point)
{
if(nFlags == MK_LBUTTON)
{
cp2.x = point.x;
cp2.y = point.y;
Invalidate();
CView::OnMouseMove(nFlags, point);
}
CScrollView::OnMouseMove(nFlags, point);
}void CDibView::OnLButtonUp(UINT nFlags, CPoint point)
{
state=0;
CScrollView::OnLButtonUp(nFlags, point);
}void CDibView::OnRButtonDblClk(UINT nFlags, CPoint point)
{
state = 0;
Invalidate();
ClientToScreen(&cp1);
ClientToScreen(&cp2);
CRect rc(cp1.x-1,cp1.y-1,cp2.x-1,cp2.y-1);
hBitmap=CopyScreenToBitmap(&rc); if (OpenClipboard())
{
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard(); }
CView::OnRButtonDblClk(nFlags, point);
CScrollView::OnRButtonDblClk(nFlags, point);
}
其中CopyScreenToBitmap函数网上有现成代码。我有再添加了一个功能就是轮廓提取,问题就是:比如,我打开一张256色位图,截取其中一个区域,粘贴,此时轮廓提取功能不能实现,不知是何解?如果将截取下来的区域粘贴到系统自带的画图工具里面,保存起来,再打开,就能实现其轮廓提取功能。
如果不清楚,本人邮箱[email protected],提供源代码。
解决方案 »
- 求救--自绘菜单问题
- 用socket传输文件到1/3时出现10054错误是怎么回事??
- ZXDT.exe 中的0x771878f1 处最可能的异常: 0xC0000005: 写入位置0x0046957c 时发生访问冲突
- 如何在多文档程序中加入背景图片?
- 大家帮帮忙,程序在没装VC环境下出问题了~!!~!~!~!~
- 如何在操作系统登录以前就启动某个程序?
- 怎样模拟键盘向指定的进程发送字符。
- ADO double型 数据的读写!
- 帮忙看一下吧 这个转换的问题
- 客户端ActiveX怎么和服务器端的asp文件通信
- 嵌入式系统中XML文件传输机制的设计与实现
- ****200分+有偿求个能播放网络real等格式媒体流的代码*****
打开msdn,搜索diblook,第一个就是其源代码