8.30_预编译头取消、菜单、下拉框、表格、按钮响应函数、获取下拉框当前值、列表显示随机值、列表奇偶数背景色、直线坐标轴

预编译头取消

  • 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拖过去就行

猜你喜欢

转载自blog.csdn.net/weixin_38593332/article/details/82218641