SpinControl控件与动态画图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZhangXiaoyu_sy/article/details/76299671

新建一个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

猜你喜欢

转载自blog.csdn.net/ZhangXiaoyu_sy/article/details/76299671