CComboBox* combownd1=NULL
combownd1=(CComboBox*)GetDlgItem(IDC_COMBO1)//获取combobox窗口指针
combownd1->AddString("1")//添加一个选项
combownd1->AddString("2")//2
combownd1->AddString("3")//3
combownd1->SetCurSel(0)//设置默认显示的是第一个"1",自己设置
获取内容:
int index=((CComboBox*)GetDlgItem(IDC_COMBO1))->GetCurSel()
//GetCurSel是获得当前选中的选项的位置索引
CString str
((CComboBox*)GetDlgItem(IDC_COMBO1))->GetLBText(index,str)
//根据位置索引可以把combobox里面的字符串取出,并放到str中
int bitcount=atoi(str)
//1,2,3是int类型的,把字符串转为int类型,如果你需要的不是int类型的,这句可以去掉了
将MFC资源文件打包成dll项目中经常会遇到主程序的资源文件是在一个dll中,就是把资源文件部分任务提取出来,比如添加各种语言的字符串,各种图标,各种版本的Dlg或者Menu等等。改好之后,只需要build下就可以生成包含各种资源文件的dll,主程序只需要去调用这个dll即可。
在软件工程中,很多项目都要这样做,因为资源和逻辑分离,这样就可以做到低耦合。
下面开始介绍如何将MFC多文档程序的资源文件打包成dll:
创建MFC程序,工程名为Main,然后一直点下一步,就创建好了一个多文档应用程序。
删除该工程的Resource.h和Main.rc,注意:这里是Remove不是Delete,VC6.0删除只是从工程中删除,文件还在;VS2005以上版本会提示Remove还是Delete。
在当前工程中添加一个MFC扩展Dll项目,工程名为Main_Res;
删除Resource Files下所有文件(Remove即可),删除Resource.h(Delete);然后Copy主程序Main的Res到Main_Res的Res中;右键Header Files,Add Existing Item,选择Main中的Resource.h,右键Resource Files,Add Existing Item,选择Main中的Main.rc。
编译Main_Res项目,生成Main_Res.dll;
在Main项目中,Main.h中include的Resource.h可以修改成../Main_Res/Resource.h也可以不修改,因为原来的Resource.h没有彻底删除,编译的时候还是可以找到的,在头文件中添加变量HINSTANCE m_hResourceDll;Main.cpp的InitInstance()最前面添加如下代码:
[cpp] view plain copy
Class View中,右键CMainAPP属性,添加ExitInstance,代码如下:
[cpp] view plain copy
int CMainApp::ExitInstance()
{
// TODO: Add your specialized code here and/or call the base class
if (m_hResourceDll)
{
AfxFreeLibrary(m_hResourceDll)
}
return CWinApp::ExitInstance()
}
m_hResourceDll = AfxLoadLibrary(_T("Main_Res.dll"))
if (m_hResourceDll)
{
AfxSetResourceHandle(m_hResourceDll)
}
else
{
MessageBox(NULL, _T("Load Main_Res.dll failed!"), _T("Error"), 0)
return FALSE
}
编译运行Main项目即可。
注意:
这里调用资源dll的方式为动态(显式)调用,静态(隐式)调用会load资源失败。貌似将主程序的资源文件提取到dll中的话,只能采用动态(显式)调用。
静态调用的时候,运行会Crash
[cpp] view plain copy
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
{
delete pMainFrame
return FALSE
}
因为LoadFrame(IDR_MAINFRAME)会失败,然后delete pMainFrame的时候就会内存访问非法!肯定是因为IDR_MAINFRAME资源没有找到。具体原因找到后我会更新说明下。
如果不在dll项目中删除Resource Files下所有文件(Remove即可),会编译报错如下:
1>CVTRES : fatal error CVT1100: duplicate resource. type:VERSION, name:1, language:0x0804
1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)