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

一、类名是 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

VC,一条会被鼠标移动的直线相关推荐

  1. 原生JS实现拖拽进度条、滚动鼠标显示相应的内容

    今天要分享的是运用原生JS实现拖拽进度条.滚动鼠标显示相应的内容,实现效果如下: 以下是代码实现,欢迎大家复制粘贴. <!DOCTYPE html> <html><hea ...

  2. 求救啊~~zedgraph鼠标移动并显示相应的X轴和Y轴值鼠标移动的时候,有一条纵轴线跟随鼠标移动,同时显示

    [问题点数:100分,结帖人mdjs198] mdjs198 等级 结帖率 100% 好痛苦啊 ,自己做出来的效果太坑了...求救啊 zedgraph 鼠标移动并显示相应的X轴和Y轴值 鼠标移动的时候 ...

  3. 幅相曲线渐近线_若最小相位系统的低频段幅频特性的渐近线是一条斜率为20dB/dec的直线,则该系统( )。_学小易找答案...

    [填空题]从发音方法上,木管乐器可以分为 . 和 三类. [判断题]创新一词形成是在 18 世纪 [单选题]系统的开环传递函数为 ,则开环幅相曲线起始角度为()°. [多选题]创新三层含义() [计算 ...

  4. c语言写一个格子涂色的游戏,格子涂色游戏(VC绘图--10:用鼠标控制绘图作业)...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 二楼代码,用鼠标左键选色,填色.用鼠标右键退出.下面是代码及注释 #include void gezi();//函数声明 int fill();//函数声 ...

  5. VC++ 进度条更新方案

    在实际开发中,如果有耗时操作,一般会在工作线程处理数据,然后处理完成后把时间传递到UI线程进行显示,切记不要在工作线程对UI进行操作. 场景: 1. 很多程序需要根据处理业务的进度来更新进度条,进度条 ...

  6. VC++ SetLayeredWindowAttributes 部分窗口透明鼠标穿透

    在初始化中使用下面两行代码 ModifyStyleEx(0, WS_EX_LAYERED); ::SetLayeredWindowAttributes(m_hWnd, RGB(1, 255, 0), ...

  7. vc 鼠标移动画直线

    如果在鼠标移动事件中直接调用lineto是不行的,因为上次画的线不会消失,回出现一片直线.正确的做法是去掉上次画的直线.代码如下 CDC *pcdc=this->GetDC(); CPen ne ...

  8. CSS--滚动条样式,鼠标点击小手,文字省略显示

    1.鼠标悬停(变小手) /*鼠标悬停变小手(全局APP.vue)*/* {cursor: pointer; } 2.滚动条样式(全局APP.vue) ::-webkit-scrollbar {widt ...

  9. VC中画基准线,随鼠标移动

    以下是示例程序的示意图,代码已经上传,有需要的朋友可以自己下.应为有源码了所以具体实现步骤我就不在博客里说明了! 1: 2: 示例程序下载地址连接:http://download.csdn.net/d ...

最新文章

  1. mysql主从不同步怎么恢复_mysql主从不同步时,怎么恢复
  2. Normalization笔记
  3. 机器学习中为什么需要梯度下降_机器学习,梯度下降算法,问题引入
  4. 软件业的作业示意流程图
  5. 机器学习笔记(6) 线性回归
  6. java构造函数内部调用_具有内部类构造函数参数的Java Reflection奇数
  7. C语言逗号表达式 - C语言零基础入门教程
  8. 小米用户画像_腾讯企鹅智库发布手机品牌用户画像:华为一二线城市用户少于小米...
  9. 计算书费(信息学奥赛一本通-T1104)
  10. php mysql not in_php – MySQL – NOT IN产生不需要的结果
  11. 点对点借贷dApp Yield宣布流动性激励迁移至SushiSwap
  12. Codeforces Gym 100338H High Speed Trains 组合数学+dp+高精度
  13. 基于NSString处理文件的高级类
  14. 信息隐藏技术与应用期末复习
  15. ndows 内存诊断工具,Windows自带内存诊断工具来帮你检测电脑内存的稳定
  16. linux安装Telnet工具
  17. 关于websocket兼容IE版本
  18. 【堆栈溢出】堆栈溢出_liangchaoxi的IT博客_新浪博客
  19. rtl 8111 linux 驱动,【驱动】在LINUX(ubuntu)系统下安装RTL8111/8168网卡驱动程序(技嘉H61主板)...
  20. Android studio的gradle教程整理

热门文章

  1. HDU 1176 免费馅饼
  2. 解决卸载时残留目标文件夹的问题
  3. 用asp.net画饼图
  4. python 爬虫代码_python之路(一)_爬虫—爬一下网页代码输出到文件
  5. Perform the Combo CodeForces - 1311C(字符串反转+树状数组)
  6. LINUX前期知识回顾
  7. Java学习笔记_数组
  8. python强类型_python动态性强类型用法实例
  9. mysql添加外键约束失败cannot add foreign key constraint
  10. yum出错Error: Cannot find a valid baseurl for repo: base