MFC中的常见问题汇总

四。对于CEdit,CList 等类,可以在资源视图中直接拖放到窗口中。也可以在代码中动态添加,动态加的要调用Create()函数,
    再MoveWindow()或是SetWindowPos()函数,再用ShowWindow()来显示或不显示,或是EnableWindow()使其可编译或是变灰.

五。对于做TAB页时,要求TAB页的Dialogue属性为:Style ->child, Border -> none,如果属性Style不是child,则窗体不会在TAB
    中,而是弹在外面。
六。combox控件中,如果是用movewindow或setwindowpos时,height要大,表示点击时的下拉框最大长度。小了的时候则表现为没有下拉框。

七。控件的tab顺序与调用的movewindow或setwindowpos顺序有关(在资源中也可以用ctrl-d调整,但是动态创建的不行),movewindow
    与调用顺序相同,而setwindowpos则与顺序相反(即逆序)

八。combox下拉框控件中,在窗体的OnSize()函数中,要用movewindow函数进行动态调整,如下:
 m_cmbTemp.movewindow(rcCtl.left,rcCtl.top, rcCtl.width(), nCmbDropheight, False)
 //其中nCmbDropheight决定下拉框的下拉条的长度(不是宽度),如果设置小了,下拉条显示不出来


九。皮肤文件可以对窗体做限制,如果窗体标题栏显示不完整,也可能是皮肤文件的原因。。。

十。CString 转换到BSTR的函数:allocSysString()

十一。在CEDIT中换行要用\r\n,而不是\n.

十二。用hhc.exe编成.chm文件时,链接的.txt文件出现乱.码,可能是换行符用的是\n, 试下\r\n,也许是这个问题。

十三。下拉框中,最好不要用index来判断,而是用windowtext得到的值来判断和设置。


十四。windows 下截获win+d键的方法:

  BOOL   CMydilog::PreTranslateMessage(MSG*   pMsg)  
{
if   (pMsg-> message   ==   WM_KEYDOWN)
{
switch   (pMsg-> wParam)
{  
case   VK_ESCAPE:
SetFocus   ();
return   TRUE;
case   'D ':
if(::GetKeyState(VK_LWIN)   <   0 )
MessageBox( "hello ");
return   TRUE;
}
}

return   CDialog::PreTranslateMessage(pMsg);


 if(::GetKeyState(VK_LWIN)   <   0 )
 {
  qDebug()<<"WM_KEYDOWN == msg->message: ::GetKeyState(VK_LWIN):TRUE 234234";
  if(::GetKeyState('D')   <   0 )
  {
   qDebug()<<"WM_KEYDOWN == msg->message: ::GetKeyState('D')   <   0";
  }
  
  return TRUE;
 }


/*
 * 函数名: CString2Char
 * 参数1: CString str                 待转换字符串
 * 参数2: char ch[]                       转换后将要储存的位置
 * 将Unicode下的CString转换为char*
 */


void CString2Char(CString str, char ch[])
{
    int i;
    char *tmpch;
    int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
    tmpch = new char[wLen + 1];                                             //分配变量的地址大小
    WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
    for(i = 0; tmpch[i] != '\0'; i++) ch[i] = tmpch[i];
    ch[i] = '\0';
}

将CString转换为int 的函数为: 

如果你准备使用Unicode 字符,你应该用_ttoi()


MFCGridCtrl控件的使用:
1.将该控件涉及的.cpp(6个)和.h(8个)文件加入工程
2.从工具箱中拖入Custom Control,右击该控件属性,将Class项设置为MFCGridCtrl
3.在工程头文件中,#include "GridCtrl.h",且定义变量CGridCtrl m_ctrlGrid;
4.在工程定义文件中,在DoDataExchange函数,添加DDX_GridControl(pDX, IDC_CUSTOM1, m_ctrlGrid);(假设控件ID为IDC_CUSTOM1)
5.在需要用到表格控件的地方使用即可。譬如:m_ctrlGrid.SetRowCount(10);
 m_ctrlGrid.SetColumnCount(3);

Cstring.tokenize 和AfxExactSubstring的区别:前者在遇到多个连续的分隔符时会忽略,后者会分隔成空字符串


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值