请教:我现在做了一个类似于VC开发环境的界面,现在想实点击某个按钮后,在右边的workspace嵌入一个DLL做的界面,在界面上显示一个曲线,当然曲线也是DLL自己画出的,说白了就是调用一个模块,将其嵌入到VC开发的界面中。我现在会从DLL调用函数和类。
请问:
1.如何将界面写入DLL中?
2.如何将它嵌入到VC开发的界面中?
2.有没有相关的参考资料,有例子就更好了...
(分不够可以再加,系统不让发大于100分的帖子,谢谢 )
请问:
1.如何将界面写入DLL中?
2.如何将它嵌入到VC开发的界面中?
2.有没有相关的参考资料,有例子就更好了...
(分不够可以再加,系统不让发大于100分的帖子,谢谢 )
解决方案 »
- 如何通过菜单项打开外部的TXT文件
- 请问下面的警告是什么意思?
- MSDN丢了,想麻烦你查一下:INTERNET_PER_CONN_OPTION_LIST此结构如何定义首页地址
- 大家谁知道哪里有支持VC for Athlon64的最新编译器下载
- 有另一个进程,它没有窗口,如何获取它的句柄来给他发消息?
- 我刚刚实现MDI框架的FORM View,不用微软的View/Document结构
- CArchive类的对象如何手工改变其IsStoring或IsLoading的值?
- 调用SetTimer()时出现Debug Assertion Failed!错误
- 判断硬盘是FAT、FAT32、NTFS的方法
- 我的vc6中的classview列表中总是莫名其妙的丢掉类名,系统是win2000server,请问这是vc的问题还是win2k的问题,如何解决?另外请问如何恢复丢掉的类名?
- windows snmp++ oid找不到
- VC读txt文件
没有具体从头开发过这样的工程,不过有几条供你参考:
1.用Borland C++ Build之类的其它IDE开发带界面的DLL,VC只要知道其入口函数就行了。
2.用VC开发DLL工程,可以尝试在DLL中创建窗口,并负责其消息循环(就行没有MFC时编写WIN32程序一样)。
3.用VC开发DLL,可以尝试在DLL中直接用MFC的窗口。总之,窗口在哪里创建无所谓,只要你的DLL入口函数在执行时会调用窗口创建函数就OK了。
唯一不同的就是这个窗口在DLL里??
TO:lizigang34,你的理解很正确。如果方便的话请把你的例子发给我看下,谢谢,我的邮箱是[email protected]
然后把对话框的位置移到你想要的位置。
先创建DLL工程,下面是DLL.h,#ifdef __cplusplus
#define DLL_API extern "C" __declspec (dllexport)
#else
#define DLL_API __declspec (dllexport)
#endif
#include <windows.h>///////////////////////////////////////////////////
// 导出函数
/////////////////////////////////////////////////////功能: 新建一窗口
//参数: void
//返回: 成功返回TRUE,失败返回FALSE
DLL_API BOOL NewDialog();///////////////////////////////////////////////////
// 内部函数
/////////////////////////////////////////////////////功能: 窗口过程函数,和一般程序类似
//参数:
//返回:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);下面是DLL.C#include "NewDialog.h"#define MAX_LENGTH 100
TCHAR szAppName [] = TEXT ("StrProg") ;
TCHAR szString [MAX_LENGTH + 1] ;int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE ;
}
DLL_API BOOL NewDialog()
{
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = NULL ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
//LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = szAppName ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
DWORD dwErr = GetLastError();
MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return FALSE ;
}
hwnd = CreateWindow (szAppName, TEXT ("DLL Demonstration Program"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, NULL, NULL) ;
ShowWindow (hwnd, SW_SHOW) ;
UpdateWindow (hwnd) ;
while(TRUE)
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ))
{
if(msg.message == WM_QUIT)
{
break;
}
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
UnregisterClass(szAppName, NULL);
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rc = {50, 50, 500, 400};
switch (message)
{ case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
DrawText(hdc, "单击鼠标左键,弹出消息框", -1, &rc, DT_VCENTER);
EndPaint(hwnd, &ps);
break;
case WM_KEYDOWN:
switch(wParam)
{
case 0x1B:
CloseWindow(hwnd);
// PostQuitMessage (0);
break;
}
return 0 ;
case WM_LBUTTONDOWN:
MessageBox(NULL, "LButton Clicked", "", MB_OK);
return 0;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}下面创建一工程用于测试,我建的是控制台程序..#include "stdafx.h"
#include "NewDialog.h"
#pragma comment(lib, "NewDialog.lib")int main(int argc, char* argv[])
{
NewDialog();
return 0;
}
参考《Windows程序设计》。。