版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
};
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();
}
运行结果如下
运行程序连接