VC,一条会被鼠标移动的直线

                          

                                        对话框中的小红线可以被移动的


一、类名是 CBinarizationDlg

二、定义两个变量
BOOL m_flag;
int nPos;

在构造函数初始化m_flag = false;nPos=256;
三、响应消息函数三个
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);

四、代码加注释

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

CPhotoMeterDoc* pDoc = (CPhotoMeterDoc*) ((CMainFrame*)AfxGetMainWnd())->GetActiveFrame()->GetActiveDocument();

CRect rect;
//GetDlgItem(IDC_STATIC_HISTO)->GetWindowRect(&rect);
//ScreenToClient(&rect);
GetDlgItem(IDC_STATIC_HISTO)->GetClientRect(&rect);
int width = rect.Width();
int height = rect.Height();

// Create a memory CDC
CDC memDC;
memDC.CreateCompatibleDC( &dc );
CBitmap bitmap;
bitmap.CreateCompatibleBitmap( &dc, width, height );
CBitmap* oldbitmap = memDC.SelectObject( &bitmap );

memDC.FillSolidRect( rect, RGB( 255, 255, 255 ) );

CPen axisPen(PS_SOLID,1,RGB(0,0,0));
CPen* pOldPen = dc.SelectObject(&axisPen);
memDC.MoveTo(rect.left+5,rect.bottom-4);
memDC.LineTo(rect.right-5,rect.bottom-4);
memDC.SelectObject(pOldPen);

// The frame
CBrush brh(RGB(0,0,0));
memDC.FrameRect(&rect,&brh);

//histogram
if (pDoc && pDoc->image) {

if (pDoc->m_hmax){
int ybase = rect.bottom-5;
float yratio = (ybase - rect.top)/(float)pDoc->m_hmax;

CPen grayPen(PS_SOLID, 1, RGB(84, 64, 64));
pOldPen = memDC.SelectObject(&grayPen);
//调整的界面刚好使rect.right-rect.left-10是512,即中间横线为512
for (int x=0 ; x<256; x++)
{
memDC.MoveTo(2*x+rect.left+5,ybase);
memDC.LineTo(2*x+rect.left+5, (int)(ybase-pDoc->m_hgray[x]*yratio));
}

memDC.SelectObject(pOldPen);
}else{
pDoc->m_hmax=pDoc->GetImage()->Histogram(pDoc->m_hr,pDoc->m_hg,pDoc->m_hb,pDoc->m_hgray);
if (pDoc->m_hmax) Invalidate();
}
}//end of histogram

CPen redpen(PS_SOLID,0, RGB(222,0,0));
pOldPen = memDC.SelectObject(&redpen);
if ((nPos >= rect.left+5) && (nPos < rect.right-5) )
{
memDC.MoveTo(nPos,rect.bottom-5);
memDC.LineTo(nPos,rect.top+4);
}
memDC.SelectObject(&pOldPen);

dc.BitBlt( 10, 10, width, height, &memDC, 0, 0, SRCCOPY );
memDC.SelectObject( oldbitmap );

}

void CBinarizationDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect rect;
GetDlgItem(IDC_STATIC_HISTO)->GetClientRect(&rect);
  rect.left +=5;
  rect.right -=5;
rect.bottom +=5;

point.Offset(-10,-10);
if (rect.PtInRect(point) && (nPos == point.x))
{
m_flag = TRUE;
nPos = point.x ;
}
CDialog::OnLButtonDown(nFlags, point);
}

void CBinarizationDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
m_flag = FALSE;
Invalidate(FALSE);

CDialog::OnLButtonUp(nFlags, point);
}

void CBinarizationDlg::OnMouseMove(UINT nFlags, CPoint point)
{
//CDC *pDC = this->GetDC();
CRect rect;
GetDlgItem(IDC_STATIC_HISTO)->GetClientRect(&rect);
rect.left +=5;
rect.right -=5;
rect.bottom +=5;

point.Offset(-10,-10);
if (m_flag && rect.PtInRect(point))
{
nPos = point.x;
Invalidate(FALSE);
}
CDialog::OnMouseMove(nFlags, point);
//ReleaseDC(pDC);
}

说明:IDC_STATIC_HISTO是一个picture控件的ID,visible = false,这个只是用来辅助定位的咚咚咚

提问的帖子:http://topic.csdn.net/u/20111001/17/952edd78-cb91-48c8-861f-0eeebf81d75d.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/243802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何修改浏览器服务器时间格式,浏览器模式怎么改模式

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。以360浏览器为例&#xff0c;浏览器模式改模式的方法&#xff1a;打开浏览器主页面&#xff0c;点击右上角的闪电图标即可更改模式。网页浏览器(Web Browser)&#xff0c;常被简称为…

乒乓操作及实例

乒乓操作 乒乓操作是一个主要用于数据流控制的处理技巧。 外部输入数据流通过“输入数据选择控制”模块送入两个数据缓冲区中,数据缓冲模块可以为任何储存模块,比较常用的储存单元为双口RAM.SRAM,FIFO等 在第一个缓冲周期,将输入的数据流缓存到“数据缓冲1”模块。在带二…

《斑点狗眼里的世界》一书的铅笔画插图

《斑点狗眼里的世界》&#xff08;The World Behind Glasses - A Dalmatians view -&#xff09;一书&#xff0c;将由同心出版社出版。作者是加拿大籍华人文钊先生。书中记录了作者夫妇与一只斑点狗游历世界的生活。这是该书的100幅铅笔画插图中的一部分。作者为薛晶晶。狗…

怎么把 CDialogBar像工具条一样使用,有图有真相

怎么把 CDialogBar像工具条一样使用 http://support.microsoft.com/kb/185672 然后再CMainframe的OnCreate()创建它&#xff0c; if (!m_wndDialogBar.Create(this,IDR_DLGBAR, CBRS_ALIGN_TOP | CBRS_FLYBY , AFX_IDW_DIALOGBAR)) { TRACE0("Failed to create dialogba…

“写画”与“惊春”:王艾画展和当代诗人朗诵会

昨天&#xff0c;在798映画廊举办了王艾的首次个人画展&#xff0c;主题为“写画”&#xff0c;同时举行了名为“惊春”的“当代诗人朗诵会”。芒克、西川、王家新、宋琳、孙文波、潇潇等十几位诗人参加或者朗诵了自己的诗作。王艾是个诗人&#xff0c;早年习画&#xff0c;后来…

使用CAtlRegExp正则表达式检查浮点数输入

一、VS2008(Sp1)环境使用CAtlRegExp类需要额外下载ATL Server&#xff0c;&#xff08;因为开源代码&#xff0c;没集成在VS2008里了&#xff09; http://atlserver.codeplex.com/ 二、下载后解压&#xff0c;如F:\CPP\ATL_Server_Source_and_Headers_9_0_70425_Alpha然后设置路…

分频时钟与使能时钟

分频时钟与使能时钟 对于资源比较丰富的FPGA&#xff0c;一般都有内嵌的多个PLL或者DLL专门用于时钟管理&#xff0c;利用他们就可以很容易地达到多个时钟的设计&#xff0c;输出时钟能够配置成设计者期望的不同频率和相位差&#xff08;相对于输入时钟&#xff09;&#xff0…

王重敏的“中国主义”

王重敏是我非常尊敬的画家。他是江南人&#xff0c;却生活在大北方&#xff0c;所以我以为他的性格中融合了南北地域的不同气韵。南方的细腻温和与北方的粗犷大气不仅显现在他的为人和性情之中&#xff0c;也体现在他的笔墨之间。他深得前辈大师傅抱石、黄显之、陈之佛的真传&a…

阿梅尔的“福娃”

女儿参加一个少年画展&#xff0c;画了两幅关于奥运的画&#xff0c;颇有意思。前者是《奥运三剑客》&#xff0c;将奥运福娃做了幽默的装扮。其中的海盗形象显然是受了电影《加勒比海盗》的影响。尤其是海盗特有的蒙眼布&#xff0c;以及木腿&#xff0c;很有创意&#xff0c;…

怎么避免UpdateData()函数弹出对话框

一个Edit控件在关联一个int 变量什么的时候&#xff0c;用UpdateData()函数跟新数据时&#xff0c;如果Edit上什么都它会弹出对话框来。。 看起来挺丑的&#xff0c;怎么避免呢&#xff1f;一个就是用Get(Set)WindowText()函数更新数据&#xff0c;有的有这样的方法&#xff1a…

基本的Testbench的搭建

基本的Testbench的搭建 对被测试设计的顶层接口进行例化。给被测试设计的输入接口添加激励。判断被测试设计的输出响应是否满足设计要求。testbench中的例化应该把input转换成reg,因为待测试设计的输入值是由testbench决定的。相应的output就应该转换成wire,因为待测试设计的…

鹤峰:美丽的茶乡——人物篇

前几天&#xff0c;我来到湖北省的鹤峰县&#xff0c;参加首届茶叶节暨鹤峰特色文化旅游文学笔会。鹤峰县位于湖北省西部的恩施土家族、苗族自治州境内&#xff0c;与湖南的张家界比邻&#xff0c;属于偏远的少数民族地区。但是这里山川秀丽&#xff0c;民风淳朴&#xff0c;尤…

鹤峰:美丽的茶乡—— 山水篇

龙渊峡是鹤峰山水中的一绝&#xff0c;它是躲避峡入口处的一段。 乘船进入龙渊峡&#xff0c;眼睛只看到一线天。目前峡中正在开辟漂流的探险旅游项目。 来参加茶叶节的宾客来到鹤峰县走马乡的茶山&#xff0c;参观了满山遍野的茶叶。

CMFCTabCtrl 切换页面闪烁问题

WinXPVS2008&#xff08;SP1&#xff09;环境 在对话框界面创建了一个CMFCTabCtrl &#xff0c;加了四个页面&#xff0c;但是切换页面时总有闪烁现象。 解决办法是页面的类里面响应 afx_msg BOOL OnEraseBkgnd(CDC* pDC); 这个函数&#xff0c;并将生成的代码 return CDialog…

流水线设计的概念

流水线设计的概念 它是面积换取速度思想的又一种具体现。 所谓流水线设计实际上是把规模较大、层次较多的组合逻辑电路分为几个级,在每一级插入寄存器并暂存中间数据。 流水线处理是提高组合逻辑设计的处理速度和吞吐量的常用手段。如果某个组合逻辑设计的处理流程可以分为…

鹤峰:美丽的茶乡—— 舞狮篇

白果村的狮灯班是鹤峰民间艺术的一个名片。我有幸看到了他们的表演。舞狮者跳到三层桌子上&#xff0c;做出各种高难惊险动作&#xff0c;舞姿优美&#xff0c;鬼斧神工&#xff0c;令人叹为观止。 尾声是狮子咬住一个红色的布卷&#xff0c;然后徐徐展开&#xff0c;于是鹤峰茶…

数据接口同步的同步方法

数据接口同步的同步方法 前级(如另外一个芯片、PCB布线、驱动接口元件)输出的延时是随机的,或者有可能变动,如何在后级完成数据的同步?对于随机到达的数据,需要建立同步机制。可以采用使数据通过RAM或者FIFO的缓存仔读取的方法,达到数据同步的目的。将前级芯片提供的时钟…

MFC中绘制高亮的图标 VC图标填充半透明色

高亮的图标即使一个图标看起来有一层半透明的颜色填充一样&#xff0c;如下图选中的哪行文字的图标有层透明色&#xff0c;这个小问题我搜遍了整个因特网都没找到答案&#xff0c;还是自己解决了&#xff0c;留个记号。。。 //Code snippets//......//m_ImgList是个CImageList变…

《觉建筑》《斑点狗眼里的世界》首发式

由同心出版社出版的《觉建筑》和《斑点狗眼里的世界》近日在郑州举行的全国书市上首发。《觉建筑》的作者曾哲是北京作家协会专业作家&#xff0c;为撰写《觉建筑》一书&#xff0c;曾哲潜心四年&#xff0c;研读了大量国内外建筑和建筑理论书籍&#xff0c;采访了国内众多的建…