下面的代码是一个Dll中的,我想在 程序用调用 OpenIndex 函数来显示这个Dll中的窗口,窗口在调用的时候一闪就过去了,刚才在网上查,好象是和消息循环有问题,怎样才可以和WinMain中的消息循环连接上呢?或者是自己写一个同样功能的消息循环?
class MyApp:public CWinApp
{
public:
MyApp():CWinApp("Index.dll") {}
BOOL InitInstance()
{
CFrameWnd *Index=new IndexFrame;
m_pMainWnd=Index;
return TRUE;
}
};
//入口函数
extern "C" _declspec(dllexport) BOOL OpenIndex()
{
MyApp theWnd; theWnd.InitInstance(); return TRUE;
}
class MyApp:public CWinApp
{
public:
MyApp():CWinApp("Index.dll") {}
BOOL InitInstance()
{
CFrameWnd *Index=new IndexFrame;
m_pMainWnd=Index;
return TRUE;
}
};
//入口函数
extern "C" _declspec(dllexport) BOOL OpenIndex()
{
MyApp theWnd; theWnd.InitInstance(); return TRUE;
}
解决方案 »
- 用exescope打开DLL文件 为什么里边的函数名是乱码?
- 恳请大家帮我入入门,谢谢
- 小弟忙着作毕业设计,有些问题不懂,望各位大哥帮忙啊!
- 请问各位,在北京那里可以弄到VC++ .NET 2003 的盘,不用花很多钱噢!
- 将XML和XSL文件合成独立的html文件
- 关于用Win32 API画 BMP 图片问题 !急急急急急急急急急急 !!!
- 单从做数据库来讲,是VB好,还是VC好?
- TurboC 2.0 和 TurboC 3.0 有何区别?
- OnDraw和OnPaint函数的区别?
- 编程实现windows系统下禁用可移动大容量存储设备以及大容量设备只读
- 奇怪, windowBlinds 是如何在XP中实现Vista 的毛玻璃效果?
- 帮帮忙哦,马上给分
没见过这样显示窗体的.别的不说OpenIndex()调用完成之后 MyApp theWnd 要销毁, 窗体早就不存在了还怎么显示?用不着消息循环,你在你自己的程序中来关闭这个DLL里的窗体就行了.
现在是没有消息循环,该如何处理呢?
都怪我在浮沙筑台呀,突击 MFC深入浅出 中.望高手能帮一下.
这是一个Dll,功能是通过调用OpenIndex函数 可以打开一个窗口,一个可以正常使用的窗口.
现在的代码也可以打开,但是一闪就没有了.
IndexFrame.hclass IndexFrame:public CFrameWnd
{
public:
IndexFrame();
IndexFrame(DataLogin EnterData);
BOOL OnCreate(LPCREATESTRUCT lpCreateStruct);
public:
//窗口操作响应
public:
//当前类局部变量
DataLogin Password;
CString Title; DECLARE_MESSAGE_MAP()
};
class MyApp:public CWinApp
{
public:
MyApp():CWinApp("Index.dll") {}
BOOL InitInstance();
void SetDataLogin(DataLogin);
DataLogin Password;
};
extern "C" _declspec(dllexport) BOOL OpenIndex(DataLogin EnterData);
[code]
[code=C/C++]
Index.Cpp#include"stdafx.h"
#include"IndexFrame.h"
BEGIN_MESSAGE_MAP(IndexFrame,CFrameWnd) ON_WM_CREATE()
END_MESSAGE_MAP()
IndexFrame::IndexFrame()
{}IndexFrame::IndexFrame(DataLogin EnterData)
{
Password=EnterData;
Title="读取网站接口";
Create(NULL,Title,WS_VISIBLE|WS_OVERLAPPEDWINDOW|WS_MAXIMIZE);//建立主窗口,所有建立在这个窗口里的控件,都要在这条语句之后}BOOL IndexFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
return TRUE;
}BOOL MyApp::InitInstance()
{
CFrameWnd *Index=new IndexFrame(Password);
m_pMainWnd=Index;
return TRUE;
}void MyApp::SetDataLogin(DataLogin a)
{
Password=a;
}//入口函数
BOOL OpenIndex(DataLogin EnterData)
{
MyApp theWnd;
MSG msg; theWnd.SetDataLogin(EnterData);
theWnd.InitInstance();
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} return TRUE;
}
2.InitInstance创建非模态对话框应该返回FALSE;
3.MyApp theWnd 应该定义为全局的;
4.没看过自己调用InitInstance()的
试试把theWnd改为全局或是静态变量.
把OpenIndex中的窗口定义为非模式对话框,但是打开多个相同的对话框后,消息乱了.谢谢楼上几位的回答,问题的根本是我对MFC不够了解,我现在正在读深入浅出MFC,书确实不错.