mfc 杂(combo、dialog、vs、delete。。。)

一段程序  :

       for (j = 0; j < dwBTDeviceFoundCount; j++) 

{ //打印出找到的蓝牙设备名字

RETAILMSG(1, (TEXT("Trying device %s\r\n"), btd[j].szName));
memset(szNameAndMac, 0,sizeof(szNameAndMac));
lstrcat(szNameAndMac, btd[j].szName);
mac.Format(_T("( %x )"),btd[j].btaddr);
wcscat(szNameAndMac, mac.GetBuffer(mac.GetLength()));


//((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(szNameAndMac);
//((CComboBox*)GetDlgItem(IDC_COMBO1))->SetCurSel(0);
//MessageBox(szNameAndMac);
int Index;
Index = m_ComboBox.InsertString(j, szNameAndMac);
//m_ComboBox.SetItemData(Index, j);


}

m_ComboBox.SetCurSel(0);


void CBlueTooth::OnCbnSelchangeCombo1()
{
// TODO: Add your control notification handler code here

nmIndex = m_ComboBox.GetCurSel();


//CString str;
//str.Format(_T("%d"),nmIndex);
//MessageBox(str);
}

问题及解决:

l  在工程中添加一个新的dialog要用如下方法,否则会有找不到dialog的错误:

在Resource View目录下.rc里面Dialog单击右键,不要insert,选择Add Resource,然后点击new,可以看到新建的dialog,双击dialog可以添加相应的类,这样就可以自动生成相应的代码,不用手动添加,避免了错误。

l  运行服务器,可能某一次会出现等待时间较长,而不显示接收到的数据这种情况,错误是多线程同步只用了一个事件。

也就是说,只有一个事件来同步线程,就不知道哪个线程先等到,所以会随机出现错误。可以设两个事件,在一个线程中Set另一个线程的事件,就把问题解决了。

l  SetDlgItemText(IDC_EDIT1, _T("1234"));这个函数如果在刷新之前,不会显示1234,如果先刷新,在设置,就能显示。应该是刷新会将DlgItemText给清空(自我认为)。

l  Combo box中下拉菜单中有很多选项,但是当我选择第二个时,它会把第二个内容连到第一个后面,不会只显示第二个:

这个错误是要在dialog界面可以设置下拉菜单的大小,一般我们不好看到下拉菜单的大小。选中combo box控件就可以看到有一个大框,那个就是下拉菜单的框,调大一点就解决了。

l  当我们动态申请一片内存的时候,最后会delete,但是内存里面的东西还在,这一点和容易出错,释放内存不是清空,如果当你再次申请内存,它不是空,如果这个时候你用连接字符串函数,就会出现上次的字符串,所以要用memset,不要仅仅delete。

l  Combo box的问题,发现每次都是和第0个通信,无论我选择哪一个,并且是连接错误:

首先是双击combo box框,添加相应的代码。这个一点原来不知道,所以每次都是和第0个通信,和你选择第几个无关。如果第0个没有开启服务器,所以才有连接失败的错误。然后添加代码:

intIndex;

           Index = m_ComboBox.InsertString(j,szNameAndMac);

    //m_ComboBox.SetItemData(Index,dwBTDeviceFoundCount-j);

//记录是第几个进入的,将其ID设置一下,才能分局根据当前的选择知道选择了哪一个。注意这里不能用AddString函数,因为Add后不知道其进入的顺序,也就是说选择当前的和我们认为的进入的顺序不一样,已经自动排序了。

l Unableto start program 'theprogram.exe'.要求重新安装VS

1.  Go to 'Build > Clean Solution'

2.  In the 'Solution Explorer' right click your project, and go to properties

3.  Make sure the configuration at the top left is 'Debug'

4.  Go to 'Linker > System > SubSystem' and change that to 'Not Set.' (If it's already set to 'Not Set' change it to 'Console.')

5.  Rebuild your program, if it fails to compile that's fine.

6.  Go back to 'Linker > System > SubSystem' and change it to what it previously was, and recompile.




你可能感兴趣的:(properties,delete,System,mfc,dialog,linker)