SpinControl控件与动态画图

来源:互联网 发布:淘宝二手市场网 编辑:程序博客网 时间:2024/05/21 15:45

新建一个mfc对话框


删除TODO静态框,确定,取消按钮

添加一个静态编辑框ID为IDC_EDIT1,一个SpinControl控件,ID为IDC_SPIN5,一个按钮



在// CfeedbinDlg.h中

// CfeedbinDlg 对话框class CfeedbinDlg : public CDialogEx{// 构造public:CfeedbinDlg(CWnd* pParent = NULL);// 标准构造函数// 对话框数据enum { IDD = IDD_FEEDBIN_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV 支持// 实现protected:HICON m_hIcon;CString *text;//4.料仓对应的点int m_num;//料仓个数HDC hdc;int baseX,baseY;//料仓输出位置int width;//料仓之间的宽度// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:CEdit m_editNum;CSpinButtonCtrl m_Spin;afx_msg void OnDeltaposSpin5(NMHDR *pNMHDR, LRESULT *pResult);afx_msg void OnBnClickedButton2();};


CfeedbinDlg.cpp中

void CfeedbinDlg::OnPaint()///比OnInitialDialog()执行要前{////设置对话框大小CRect   temprect(0,0,800,650);   CWnd::SetWindowPos(NULL,0,0,temprect.Width(),temprect.Height(),SWP_NOZORDER|SWP_NOMOVE);////获得窗口的设备描述表    hdc = ::GetDC(m_hWnd);//创建字体  显示文字HFONT hFont = CreateFont(20,0,0,0,0,0,0,0,GB2312_CHARSET,0,0,0,0,L"微软雅黑");  //1.创建一种字体SelectObject(hdc, hFont);// 2.将字体选入设备环境中SetBkMode(hdc,TRANSPARENT);//3.设置文字背景色为透明    //画线  //移动到线条的起点//分割区域MoveToEx(hdc,0,550,NULL);LineTo(hdc,800,550);MoveToEx(hdc,0,230,NULL);LineTo(hdc,800,230);MoveToEx(hdc,550,0,NULL);LineTo(hdc,550,550);HBRUSH hBrush=CreateSolidBrush(RGB(64, 128, 128));//创建画刷SelectObject(hdc, hBrush);//选用画刷int k=m_num-1; int baseX=580,baseY=520,width=49;//初始化料仓宽度 位置Rectangle(hdc, baseX+80, baseY-(width-4)*6, baseX+100, baseY+10);//画矩形if(m_num>5)width=5*width/m_num;for(int i=1;i<=m_num;i++){Rectangle(hdc, baseX, baseY-10-i*width, baseX+180,baseY-i*width);SetTextColor(hdc,RGB(0,0,0));TextOut(hdc,baseX-21,baseY-15-i*width,text[k],wcslen(text[k]));TextOut(hdc,(baseX+189),baseY-15-i*width,text[k],wcslen(text[k]));k--;}    Rectangle(hdc, baseX, baseY, baseX+180, baseY+30);//释放设备描述表    ::ReleaseDC(m_hWnd, hdc);if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}DeleteObject(hBrush);DeleteObject(hFont);DeleteDC(hdc);}



SpinControl控件添加UDN_DELTAPOS事件,


函数体修改为

void CfeedbinDlg::OnDeltaposSpin5(NMHDR *pNMHDR, LRESULT *pResult){LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);// TODO: 在此添加控件通知处理程序代码UpdateData(true);  CString str;  m_editNum.GetWindowText(str);//获取编辑框的值 int i=_ttoi(str);if(pNMUpDown->iDelta == -1) // 如果此值为-1 , 说明点击了Spin的往下的箭头  {  if(i-1<1)i=2;if(i>100)i=101;str.Format(_T("%d"), --i);m_editNum.SetWindowText(str);}  else if(pNMUpDown->iDelta == 1) // 如果此值为1, 说明点击了Spin的往上的箭头  {  if(i+1>100)i=99;if(i<1)i=0;str.Format(_T("%d"), ++i);m_editNum.SetWindowText(str);}  UpdateData(false);  //获取最新的料仓个数CString bin;  m_editNum.GetWindowText(bin);//获取编辑框的值 m_num=_ttoi(bin);//料仓的个数text=new CString[m_num];//4.初始化字符int l=0;for(int i=m_num-1;i>=0;i--){text[i].Format(_T("%d"),l++);}OnBnClickedButton2();*pResult = 0;}
最后添加按钮点击事件,函数体如下
void CfeedbinDlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码CString str;int k=0;for(int i=m_num-1;i>=0;i--){str.Format(_T("%d"), k++);text[i]=str;}//重绘 刷新料仓RECT rct={555,240,800,550};LPCRECT pcrect=&rct;InvalidateRect(pcrect,true);UpdateWindow();OnPaint();}

运行结果如下


运行程序连接

http://download.csdn.net/detail/zhangxiaoyu_sy/9914621

原创粉丝点击