mfc 惯用控件使用方法及常见数据类型转换

mfc 常用控件使用方法及常见数据类型转换
最近做了几个mfc小程序,想把我们经常用到而又经常忘记的的小知识记下来

一 数据类型的转换

1 int 到CString

   CString str;

   int tid=12,sno=21;
    str.Format("SELECT * FROM tiankong where ID=%d and sno=%d",tid,sno);

2 CString  到int

    CString str="asfassdfs";

    const char * pBuffs=LPCTSTR(str);
    int s=atoi(pBuffs);

或者读文件时

     CString flag;

     char TempStr1[10];

     memset(TempStr1,'\0',10);
     file.ReadString(flag);//读取第一行数据,第一行数据为坐标点数据
     sscanf(flag,"%s",TempStr1);
     int iflag = atoi(TempStr1);

3 int 到char[]

   char str[255];

   int i=1234;

   sprintf(str,"字符串:%d",i);

二 列表

1 列表设置扩展样式

    m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT );//有网格,能选中一行

2 添加列属性及设置列大小

    m_list.InsertColumn(0, _T("名称"), LVCFMT_LEFT);
    m_list.InsertColumn(1, _T("类型"), LVCFMT_LEFT);
    m_list.InsertColumn(2,_T("父目录"), LVCFMT_LEFT);
    m_list.InsertColumn(3,_T("创建用户"), LVCFMT_LEFT);
m_list.InsertColumn(4,_T("备注"), LVCFMT_LEFT);
//SP-A3.设置各个栏的宽度
    m_list.SetColumnWidth(0,100);
    m_list.SetColumnWidth(1,50);
    m_list.SetColumnWidth(2,100);
    m_list.SetColumnWidth(3,100);
m_list.SetColumnWidth(4,100);

3 添加数据

   int nRow=m_list.InsertItem(0,"");
   if(cd->d[i].d_flag==1)
          type="目录";
   else type="文件";
      m_list.SetItemText(nRow,0,cd->d[i].d_name);
   m_list.SetItemText(nRow,1,type);
   if(cd->d[i].d_parent)
   m_list.SetItemText(nRow,2,cd->d[i].d_parent->d_name);
   m_list.SetItemText(nRow,3,cd->d[i].user);

4 获得选中的一行

int nItem = -1;
LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR;
if(lpNMItemActivate != NULL)
{
  nItem = lpNMItemActivate->iItem;
}
else return;
if(nItem<0) return;
m_list.SetItemState(nItem,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
m_list.SetHotItem(nItem);

三 树形控件

1 添加数据

m_tree.DeleteAllItems();
HTREEITEM hItem,hSubItem;
hItem =m_tree.InsertItem("根目录",TVI_ROOT);//在根结点上添加Parent1
hSubItem =m_tree.InsertItem(cd->d[0].d_name,hItem);//在Parent1上添加一个子结点
hSubItem =m_tree.InsertItem(cd->d[1].d_name,hItem ,hSubItem);//在Parent1上添加一个子结点,排在Child1_1后面
hSubItem =m_tree.InsertItem(cd->f[0].f_name,hSubItem);//在Parent1上添加一个子结点,排在Child1_1后面

四 文件

1 写一行

CString str="";
  CStdioFile file;
  file.Open(filename,CFile::modeCreate|CFile::modeWrite);
 
  str.Format("%d\r\n",d.flag);
  file.WriteString(str);

  file.Close();

2 读一行

CStdioFile file;
  file.Open(filename,CFile::modeRead);
  CString flag="";
  int iflag;
     //if(!file.ReadString(flag));
     char TempStr1[10];

     memset(TempStr1,'\0',10);
     file.ReadString(flag);//读取第一行数据,第一行数据为坐标点数据
     sscanf(flag,"%s",TempStr1);
     iflag = atoi(TempStr1);
     //MessageBox(flag);
五 其他

1 建立对话框

login.Create(IDD_LOGIN,this->GetDesktopWindow());

this->ShowWindow(false);
     //dlg.SetParent(this->GetDesktopWindow());
    // login.ShowWindow(SW_SHOW);
  login.DoModal();

2 获得对话框

CFileApp *ca= (CFileApp *)AfxGetApp();
//AfxGetApp()-> m_pMainWnd->GetDlgItem
    CFileDlg * cd=(CFileDlg * )ca->m_pMainWnd;