VC2012学习笔记(控件)

来源:互联网 发布:淘宝 原创棉麻女装 编辑:程序博客网 时间:2024/04/29 07:52

今天装上VS2012试了下,本来是不想装VB的却没有选择安装的提示,只好都装上了。C盘要9G太占地方。打开后直接被那界面的颜色震撼了,白花花一片,分不出哪儿是哪儿。赶忙去百度了下如何换肤。不过换过的颜色也不好看,色彩搭配也是门艺术呀,MS太逊,于是很怀念BCB中class c的样子。然后打开了个MFC的解决方案,发现工具箱里是空的,切换了好几次资源文件窗口还是什么都没有,最后右键-》重置工具箱,总算是出来了。属性窗口除了操作控件属性,也可以查看并修改函数的属性,还可以改成员变量的属性,这个不错。如果是静态const变量还可以在属性窗口赋值,但不符合的成员变量也可以赋值但编译时报错。

//CSDN的排版真是大问题,怎么就没办法保持一致呢?也不能改行距吗?有知道的留言告诉我啊

一  Edit
   1 长度限制
   OnInitDialog()中:m_edit1.SetLimitText(8);            // m_edit1为编辑框的成员变量
   或者:
   CEdit*pEdt=(CEdit*)GetDlgItem(IDC_EDIT1);
   pEdt->SetLimitText(8);                               // 限制编辑框输入长度为8字节

   2 汉字

   Cstring ss = "你好";

   if(IsDBCSLeadByte(ss[i]))   //    是DBCS

     {        

        i += 2;

        AfxMessageBox("汉字");

      }

3 字体及大小

定义一全局变量或成员变量CFont    font;                                         //不要定义成局部变量,否则没效果

CEdit*pEdt=(CEdit*)GetDlgItem(IDC_EDIT1);

font.CreatePointFont(266,"Arial");

pEdt->SetFont(&font);

4  响应回车

Edit 属性 multiline = true;want return = true;

在classwizard中选择“类名”选择虚函数,就可以看到窗口类里被重载过的虚函数了。

重载PreTranslateMessage函数,判断当前焦点窗口为EDIT时,拦截消息值为WM_KEYDOWN且WPARAM为VK_RETURN的消息,直接返回TRUE。 
      

BOOL CbarcodeMFCDlg::PreTranslateMessage(MSG* pMsg){   if(GetFocus()->GetDlgCtrlID()==IDC_EDIT1)  {    if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)    {      //call      return TRUE;    }  }  return CDialogEx::PreTranslateMessage(pMsg);}

 

二  打开/保存对话框

让用户选择文件进行打开和存储操作时,就要用到文件打开/保存对话框。MFC的类“CFileDialog”用于实现这种功能。使用“CFileDialog”声明一个对象时,第一个BOOL型参数用于指定文件的打开或保存,当为TRUE时将构造一个文件打开对话框,为FALSE时构造一个文件保存对话框。

在构造“CFileDialog”对象时,如果在参数中指定了“OFN_ALLOWMULTISELECT”风格,则在此对话框中可以进行多选操作。此时要重点注意为此“CFileDialog”对象的“m_ofn.lpstrFile”分配一块内存,用于存储多选操作所返回的所有文件路径名,如果不进行分配或分配的内存过小就会导致操作失败。下面这段程序演示了文件打开对话框的使用方法。

CFileDialog mFileDlg(TRUE, NULL,NULL, OFN_HIDEREADONLY|OFN_OVER WRITEPROMPT|OFN_ALLOWMULTISELECT,“All Files (*.*)|*.*| |”, AfxGetMainWnd()); CString str(“ ”, 10000); mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000); str.ReleaseBuffer(); POSITION mPos=mFileDlg.GetStartPosition(); CString pathName(“ ”, 128); CFileStatus status; while(mPos!=NULL) { pathName=mFileDlg.GetNextPathName(mPos); CFile::GetStatus(pathName, status); } 


三 动态改变控件的caption

#ifdef SAVE 
       AfxGetMainWnd()->SetWindowTextW(_T("BarcodeSAVE_64_v1.0.0"));  //窗口
   #endif

(CButton*)GetDlgItem(IDC_BUTTON1)->SetWindowTextW(_T("ok")); //button

SetDlgItemText(IDOK,_T("開始"));

 

四   关闭窗体

窗口上有默认的"确定" "取消" 按钮 , 如果要拿掉的话需要删除三个地方. 声明,定义, message map .

void CDemoExcelCtrlDlg::OnBnClickedCancel()  函数存在的话, 叉掉窗口会默认跳转到这来执行CDialogEx::OnCancel();. 如果不存在的话呢??

所以, 如果放一个空的OnBnClickedCancel()函数,是叉不掉窗口的.

 

五 IDC_STATIC关联成员变量

DDX_TEXT()    : 把变量和控件的文本(WindowText)关联起来,
DDX_Control()  :把控件变量和控件本身关联起来,
DoDataExchange(pDX) :处理所有变量与其关联控件交换数据的函数。

1. 在.h中声明:    

     CString m_strUIExcel;

     CStatic m_ctlUIExcel;

     CEdit  m_ctlUIStartLineE;

     UINT m_uUIStartLineE;

2. 在.cpp中进行关联:

void CLXTDlg::DoDataExchange(CDataExchange* pDX)

{

    CDialog::DoDataExchange(pDX);

    DDX_Control(pDX, IDC_STATIC_EXCEL, m_ctlUIExcel); //关联控件和控件变量
    DDX_Text(pDX, IDC_STATIC_EXCEL, m_strUIExcel);    //关联控件和变量

      DDX_Control(pDX, IDC_EDIT_STARTLINE, m_ctlUIStartLineE);

      DDX_Text(pDX, IDC_EDIT_STARTLINE, m_uUIStartLineE);

}

VC中像Label、PictureBox之类的静态控件默认ID为IDC_STATIC , 关联之前要把IDC_STATIC重命名, 才能在classwizard中看到这个控件.加入变量时选择"控制项变量"VC会自动添加上面的代码. 注意VALUE 和CONTROL的区别.如果是control则变量类型和控件类型一致, 如果是value则变量可以是其它类型. 

 

3 使用:

更新 : 通过update(TRUE)取得控件上的值到m_strID,处理修改后通过update(FALSE)传回控件,

界面显示 :通过m_ctlUIExcel.GetWindText(str) 取得值,通过m_ctlUIExcel.SetWindText(_T("繼續"));传回控件界面显示

通过  m_ctlUIExcel.ShowWindow(FALSE); 使控件不可见.

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击