//suggest you do a resource dll,and call it in your project.follow this steps: 纯资源的DLL就是只包含资源的DLL,例如:图标,位图,字符串,声音,视频,对话框等。使用纯资源DLL可以节约可执行文件的大小,可以被所有的应用程序所共享,从而提高系统性能。纯资源DLL的编写比普通的DLL要简单的多,首先创建一个WIN32 DLL工程,不是MFC的DLL,然后创建一个资源文件 *.RC,添加到资源DLL的工程中去。然后添加一个初始化DLL的原文件。 #include <windows.h> extern "C" BOOL WINAPI DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID ) { return 1; } 这是纯资源DLL所必须需的代码,保存这个文件为*.CPP。编译这个资源DLL。在应用程序显示的调用这个DLL,使用LoadLibrary函数装入资源DLL,FindResource和LoadResource来装入各种资源,或者使用下列的特定的资源装入函数: FormatMessage LoadAccelerators LoadBitmap LoadCursor LoadIcon LoadMenu LoadString 当资源使用结束,你的应用程序须调用FreeLibrary函数来释放资源。 下面就讲一下如何调用编写好的资源DLL 首先在应用程序中声明一个DLL的句柄,HINSTANCE m_hLibrary;在OnCreate( )函数中调用LoadLirbrary( ),在OnDestory( )中调用FreeLibrary()。
不是load,而是类似调用ShellExecute函数,将外部应用程序调用起来,外部应用程序作为一个独立的程序可以自运行,只是需要一个客户端将外部程序嵌入显示到客户端的视图区域。re: you should execute your program,then modify its window property to child.and move it to right position.
难度很大, 可以考虑用Terminal Server? 不知道,可不可行?
to kingzai(stevenzhu): 你说的方法是类似下面代码这样吗?SetWindowLong(m_pViewContainer->m_hWnd, GWL_STYLE, GetWindowLong(m_pViewContainer->m_hWnd, GWL_STYLE)|WS_CLIPCHILDREN); HINSTANCE hp = ShellExecute(NULL, NULL, "notepad", NULL, "", SW_SHOWMAXIMIZED); CWnd *pWnd = NULL;
while(1) //一直到写字板窗体被建立 { pWnd=CWnd::FindWindow("Notepad",NULL); if (pWnd) break; } pWnd->SetParent(m_pViewContainer);我试写字板程序好用,但是我自己做一个单文档的应用程序就无法嵌入客户端,你知道是什么原因吗?to wangk(倒之):能具体说说你的方法吗?
LoadResource看MSDN的例子。
纯资源的DLL就是只包含资源的DLL,例如:图标,位图,字符串,声音,视频,对话框等。使用纯资源DLL可以节约可执行文件的大小,可以被所有的应用程序所共享,从而提高系统性能。纯资源DLL的编写比普通的DLL要简单的多,首先创建一个WIN32
DLL工程,不是MFC的DLL,然后创建一个资源文件 *.RC,添加到资源DLL的工程中去。然后添加一个初始化DLL的原文件。
#include <windows.h>
extern "C"
BOOL WINAPI DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID )
{
return 1;
}
这是纯资源DLL所必须需的代码,保存这个文件为*.CPP。编译这个资源DLL。在应用程序显示的调用这个DLL,使用LoadLibrary函数装入资源DLL,FindResource和LoadResource来装入各种资源,或者使用下列的特定的资源装入函数:
FormatMessage
LoadAccelerators
LoadBitmap
LoadCursor
LoadIcon
LoadMenu
LoadString
当资源使用结束,你的应用程序须调用FreeLibrary函数来释放资源。
下面就讲一下如何调用编写好的资源DLL
首先在应用程序中声明一个DLL的句柄,HINSTANCE m_hLibrary;在OnCreate( )函数中调用LoadLirbrary(
),在OnDestory( )中调用FreeLibrary()。
you should execute your program,then modify its window property to child.and move it to right position.
可以考虑用Terminal Server?
不知道,可不可行?
你说的方法是类似下面代码这样吗?SetWindowLong(m_pViewContainer->m_hWnd, GWL_STYLE, GetWindowLong(m_pViewContainer->m_hWnd, GWL_STYLE)|WS_CLIPCHILDREN);
HINSTANCE hp = ShellExecute(NULL, NULL, "notepad", NULL, "", SW_SHOWMAXIMIZED);
CWnd *pWnd = NULL;
while(1) //一直到写字板窗体被建立
{
pWnd=CWnd::FindWindow("Notepad",NULL);
if (pWnd) break;
}
pWnd->SetParent(m_pViewContainer);我试写字板程序好用,但是我自己做一个单文档的应用程序就无法嵌入客户端,你知道是什么原因吗?to wangk(倒之):能具体说说你的方法吗?
就像XP的远程桌面一样。(记不得在网上那里看过了)
取主窗口句柄函数:
long GetMainHwnd()
{
long lhMainWnd = (long)(AfxGetApp()->GetMainWnd()->GetSafeHwnd()); return lhMainWnd;
}客户端调用:SetWindowLong(this->m_hWnd, GWL_STYLE, GetWindowLong(this->m_hWnd, GWL_STYLE|WS_CLIPCHILDREN);
WND hWnd = (HWND)m_clock.GetMainHwnd();//m_clock外部程序接口CWnd* pWnd = new CWnd();
pWnd->m_hWnd = hWnd;
pWnd->SetParent(this);