预编译头取消
- VS2008:cpp文件右键属性,左上选择relese,下面C++点开,选预编译,右边有下拉不使用。
菜单
- 建立菜单,XXXDlg::OnInitDialog()中添加代码如下:
BOOL Ctest35Dlg::OnInitDialog() //系统生成不用写
{
CDialog::OnInitDialog(); //系统生成不用写
// 将“关于...”菜单项添加到系统菜单中。 //系统生成不用写
CMenu menu;
menu.LoadMenu(IDR_MENU1);
SetMenu(&menu);
menu.Detach();
- 资源视图下右键项目添加菜单,注意把ID改成IDR_MENU1就行了。
下拉框
- 生成下拉框,改ID为IDC_COM_One,sort设为false,type选Drop list(禁止输入,省事),XXXDlg::OnInitDialog()中添加
CString strTemp;
((CComboBox*)GetDlgItem(IDC_COM_One))->ResetContent();//消除现有所有内容
for(int i=1;i<=100;i++)
{
strTemp.Format("%d",i);
((CComboBox*)GetDlgItem(IDC_COM_One))->AddString(strTemp);
}
表格
- 生成表格,给表格添加变量m_list,view选择report,在XXXDlg::OnInitDialog()中添加
DWORD dwStyle = m_list.GetExtendedStyle(); //添加列表框的网格线
dwStyle |= LVS_EX_FULLROWSELECT;
dwStyle |= LVS_EX_GRIDLINES;
m_list.SetExtendedStyle(dwStyle);
m_list.InsertColumn(0,"编号",LVCFMT_LEFT,40); //添加列标题, 这里的80,40,90用以设置列的宽度。LVCFMT_LEFT用来设置对齐方式
m_list.InsertColumn(1,"第一组",LVCFMT_LEFT,80);
m_list.InsertColumn(2,"第二组",LVCFMT_LEFT,80);
m_list.InsertColumn(3,"第三组",LVCFMT_LEFT,80);
m_list.InsertColumn(4,"第四组",LVCFMT_LEFT,80);
m_list.InsertColumn(5,"第五组",LVCFMT_LEFT,80);
按钮响应函数
- 建立按钮、右键属性,黄色打雷标志选择控件事件,BN_CLICKED添加函数
获取下拉框当前值
- 在按钮函数void CExercise3Dlg::OnBnClickedButton1()里面写代码如下,其中IDC_COM_One是下拉框的ID,但是这个不能直接显示在列表中,因为类型不符。
int index;
index=((CComboBox*)GetDlgItem(IDC_COM_One))->GetCurSel();
列表显示随机值
- 不大于index的随机数,也写在按钮响应函数里,以下的所有:
for (int m = 0; m < 10; m++)
{
CString strItem = _T("");
strItem.Format("Item %d", m);
m_ctllist.InsertItem(m, strItem);
//设置列表中项的文本和数据
for (int n = 1; n < 4; n++)
{
int num = rand()%index;
CString strText = _T("");
strText.Format(_T(" %d "), num);
m_ctllist.SetItemText(m, n, strText);
m_ctllist.SetItemData(m, m);
}
}
- 其中三行是类型转换
int num = rand()%index;
CString strText = _T("");
strText.Format(_T(" %d "), num);
- 注意:如果最开始在OnInitDialog()函数里面设置的列表列数不够3个,就只显示设置的个数,如果多了以上面那个二重循环里面的n最大值显示,不报错。
列表奇偶背景色
- 右键资源视图里的列表,添加响应函数NM_CUSTOMDRAW,覆盖整个函数如下:
void Ctest36Dlg::OnNMCustomdrawFor(NMHDR *pNMHDR, LRESULT *pResult)
{
//LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
NMLVCUSTOMDRAW* pNMCD = (NMLVCUSTOMDRAW*)(pNMHDR);
if(CDDS_PREPAINT == pNMCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (CDDS_ITEMPREPAINT == pNMCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if((CDDS_ITEMPREPAINT|CDDS_SUBITEM)==pNMCD->nmcd.dwDrawStage)
{
COLORREF clrNewTextColor, clrNewBkColor;
int nItem = static_cast<int>(pNMCD->nmcd.dwItemSpec);
if(nItem %2)
{
clrNewTextColor = RGB(0,0,0);
clrNewBkColor = RGB(175,238,238);
}
else
{
clrNewTextColor = RGB(0,0,0);
clrNewBkColor = RGB(255,250,240);
}
pNMCD->clrText = clrNewTextColor;
pNMCD->clrTextBk = clrNewBkColor;
*pResult = CDRF_DODEFAULT ;
}
}
画横纵直线坐标轴
在CXXXDlg::OnPaint()的最末尾添加代码,就是那个一长串的if/else结束以后,没有东西的了,只剩一个大括号的地方
m_picShow是为picture控件添加的变量
else
{
CDialog::OnPaint();
} //从这下面开始写
CDC *pDCx;
CDC *pDCy;
pDCx = m_picShow.GetDC();
pDCy = m_picShow.GetDC();
CPen Pen(PS_SOLID,0.5,RGB(0,0,0));
CPen *oldPenx = pDCx->SelectObject(&Pen);
CPen *oldPeny = pDCy->SelectObject(&Pen);
pDCx->MoveTo(20,110);
pDCx->LineTo(570,110);
pDCy->MoveTo(20,10);
pDCy->LineTo(20,200);
pDCx->SelectObject(oldPenx);
pDCy->SelectObject(oldPeny);
}
- 坐标轴旁边的数字,数量不多的话直接static text拖过去就行