本人要做一个DLL,提供一些基本数据输入功能,并且需要有对话框界面,怎么做呢?
对话框做过,mfc库DLL也做个,但合起来就不知道怎么做?
DLL能够调用对话框资源, 仅仅显示了这个对话框。不能向它的控件中编辑信息,请问该如何调用这些控件,dll的导出函数又该加上什么呢
对话框做过,mfc库DLL也做个,但合起来就不知道怎么做?
DLL能够调用对话框资源, 仅仅显示了这个对话框。不能向它的控件中编辑信息,请问该如何调用这些控件,dll的导出函数又该加上什么呢
解决方案 »
- hook魔兽的send的问题
- Local Server,为什么不注册class也可以?coclass是不是不能指定threading model?
- CListCtrl中查某具体值的位置
- 动态创建了一些button,怎么识别一个button按下的消息?
- 咋往blog上发东西呀?
- 如何去掉onprepareprinting中对话框拖动造成的屏幕不刷新问题
- 在CDialog中加了CListCtrl,移动窗口的时候,CListCtrl不能正确重画,怎么办?
- 应用程序调用dll,数据正常,但是出现堆栈错误!dll中没有人为控制堆栈!开发工具:VC6!
- 请各路高手赐教
- Open程序问题——急
- directshow中关于MPEG2文件帧的问题
- 请问我用POSITION来得到CListCtrl的item序号有什么不妥吗?
你可以这样子做:
1.建立一个Shared MFC DLL工程,加入工程名字叫MyDLL,在里边添加一个对话框资源,一般直接添加会默认为IDD_DIALOG1,假使我们就使用这个ID吧;
2.在添加的对话框资源上添加你说需要的控件,比如你说需要的输入数据的控件,像EditBox,RichEditBox,ComboBox等等,方法和使用exe一样;
3.如果你使用VC6,那就CTRL+W类向导给IDD_DIALOG1关联一个类,我们假使这个类为CMyDlg;如果使用VS2005,可以在对话框资源上点击右键,选择“添加类”,然后就可以直接添加了;
4.在你工程中的MyDLL.cpp中添加代码输出你的DLL对话框,当然你也可以新建一个cpp文件去输出,选择工程自动生成的MyDLL.cpp源文件是因为你可以少写一些包含文件的代码,方法类似下边:
//先包含你的对话框类头文件:
#include "MyDlg.h"
//然后导出:
extern "C" __declspec(dllexport) void ShowDLL(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//如果使用模态对话框,使用下边的代码:
CMyDlg myDlg;
myDlg.DoModal();
//如果使用非模态对话框,使用下边的代码:
CMyDlg *pMyDlg=new CMyDlg();
pMyDlg->Create(IDD_DIALOG1,NULL);
pMyDlg->ShowWindow(SW_SHOW);
}
5.编译,可以生成一个.DLL文件和一个.lib文件;
6.新建一个MFC exe工程,给对话框添加一个按钮IDD_BTN_CALL(或者你直接用系统自动生成的OK按钮也行);
7.给你的exe工程关联一个类,加入叫CMyExe;
8.在MyExe.cpp文件开头添加如下代码来导入DLL资源(这里给出一个静态调用DLL的方法,动态的方法要复杂一点,你可以到网上找到方法的):
#pragma comment(lib,"MyDlg.lib")
extern "C" __declspec(dllimport) void ShowDLL(void);
9.在你的OnBtnCall()或者OnOK()函数中写下这句代码就OK了:
ShowDLL();
按你说的方法,设调用DLL工程为B,创建的DLL工程为A。运行后发现B能够显示A中的 对话框。但是
A中对话框中的所有消息映射函数的功能都不能在B中实现。
比如在A中对话框中的消息映射函数如下:
BEGIN_MESSAGE_MAP(Dialog,CDialog)
{
ON_EN_CHANGE(IDC_EDIT1, OnchangeEeit1);
ON_EN_CLICED(IDC_BUTTON1,OnButton1);
}
在B工程下,左键点IDC_BUTTON1,并未实现在A共程中应有的功能。
void Dialog::OnButton1()
{
CEdit* edit=(CEdit*)GetDlgItem(IDD_EDIT1);
edit->EnableWindow(FALSE);
}
请问这是何啊?
m_edit1.EnableWindow(FALSE);