MFC在单文档打开的图片中怎么选中某个区域,并且得到该区域的内容和RGB值

MFC在单文档打开的图片中怎么选中某个区域,如何用LButtonDown,LButtonUp,MouseMove实现?并且在另外一个对话框中显示该区域内容和得到其RGB值... MFC在单文档打开的图片中怎么选中某个区域,如何用LButtonDown,LButtonUp,MouseMove实现?并且在另外一个对话框中显示该区域内容和得到其RGB值的范围.

我的代码编译连接没错,但是运行时会报错崩溃,运行到MessageBox("Hello!");//检测语句前都没错,下一句 CBitmap::FromHandle(g_hBitmap)->GetBitmap(&bmp);就崩溃了.

void CHSIDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here

int width, height;
width = SelectedRect.right - SelectedRect.left;
height = SelectedRect.bottom - SelectedRect.top;

char title[128];
sprintf(title, "预览 %d * %d", width, height);
SetDlgItemText(IDC_HSIRANGE_PREVIEW, title);

CWnd *Pic;
Pic = GetDlgItem(IDC_PICTURE);

RECT PicRect;
Pic->GetWindowRect(&PicRect);
ScreenToClient(&PicRect);

CDC *pdc = GetDC();
HDC hdc = pdc->m_hDC;
HDC memdc = ::CreateCompatibleDC(hdc);
BITMAP bmp;
MessageBox("Hello!");//检测语句
CBitmap::FromHandle(g_hBitmap)->GetBitmap(&bmp);
::SelectObject(memdc, g_hBitmap);
::StretchBlt
(
hdc,
PicRect.left + 1,
PicRect.top + 1,
PicRect.right - PicRect.left - 2,
PicRect.bottom - PicRect.top - 2,
memdc,
SelectedRect.left+scroll_lefttop.x,
SelectedRect.top+scroll_lefttop.y,
width,
height,
SRCCOPY
);
ReleaseDC(pdc);
::DeleteDC(memdc);

// Do not call CDialog::OnPaint() for painting messages

}
展开
 我来答
scorpiodwy
2011-05-09 · TA获得超过262个赞
知道答主
回答量:151
采纳率:0%
帮助的人:106万
展开全部
哥们。。。你为啥全写在OnPaint里面啊?OnPaint是窗口重绘时调用的。。直接在View类里面按个增加消息响应LButtonDown,LButtonUp,MouseMove函数,代码我就不说了。。意思跟你说下吧。。在view类里加一个成员变量(CPoint类型),保存鼠标点击的坐标(初始坐标)。。在,LButtonUp里还有个CPiont类型的变量point(VC默认的),这个点是终点。。有了起点和终点,CRect就出来了。。区域就是这个CRect。。
至于对话框。。在RescourcesView里先自己加个出来。。再从class wizard里加相应的处理。。显示该区域内容和得到其RGB值的范围都有现成的函数用的。。MSDN查下吧。。
至于您那段代码。。小弟没看。。。咩哈哈
追问
谢谢回答啊~直接在View类里面按个增加消息响应LButtonDown,LButtonUp,MouseMove函数我一开始都实现了,问题是要从另一个Dialog里显示出来,代码是在Dialog里的.不过现在解决了.还是谢谢你的回答啊!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式