控制台主程序通过调用DLL显示对话框

来源:互联网 发布:机房搬迁网络割接方案 编辑:程序博客网 时间:2024/05/16 12:04
为了实现【控制台主程序通过调用DLL显示对话框】这个效果,已经折腾两天了,今天终于有了一点眉目,特此记录。
首先描述一下,我为什么这么做。我在写一个基于C语言运用DLL来实现的程序,其他的部分都封装在了不同的DLL里,主程序就是一个win32控制台程序。现在希望做一个界面来显示,因此就希望在写一个DLL,调用win32的接口,来做一个显示窗体。
一、主程序:
#include <stdio.h>#include <Windows.h>int main(int argc,char* argv[]){ printf("hello world!\n"); typedef void (WINAPI* PROCFUN)(); HINSTANCE hInst1; HWND hWnd; hWnd=GetForegroundWindow(); hInst1 =LoadLibrary("DllDisplayDialog.dll"); PROCFUN _PROCFUN1=(PROCFUN)GetProcAddress (hInst1,"ShowDlg"); _PROCFUN1(); FreeLibrary(hInst1); getchar(); return 0;}


注释:主程序做两件事:1、测试控制台能否显示(用了printf语句);2、调用DLL的语句(定义函数类型、得到模块句柄、得到导出函数地址、运行函数)
二、DLL程序
DLL程序为一个win32 DLL程序【一定要是win32,不可以是MFC DLL】,主要实现的功能是生成一个对话框(供主程序调用),对话框上有控件,并且有自己的消息循环。DLL程序中主要包含有:
1、在DLL程序中加个两个对话框资源,IDD_DLG_MAIN和IDD_DLG_ABOUT,定义实例句柄和对话框窗体句柄,以及声明函数。
HINSTANCE hinst = NULL;HWND hMainDlg = NULL;HWND hAboutDlg=NULL;BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);BOOL CALLBACK AboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);extern "C" __declspec(dllexport) void ShowDlg();

2、定义DLL导出函数
extern "C" __declspec(dllexport) void ShowDlg(){ hMainDlg = (HWND)DialogBox(hinst,MAKEINTRESOURCE(IDD_DLG_MAIN), NULL,(DLGPROC)DlgProc); SetWindowTextA(hMainDlg,"my"); ShowWindow(hMainDlg, SW_SHOWNORMAL); UpdateWindow(hMainDlg);}

3、定义两个对话框的消息响应函数
/*IDD_DLG_MAIN*/BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){ switch(message) { case WM_COMMAND:   if(LOWORD(wParam)==IDOK)   hAboutDlg = (HWND)DialogBox(hinst,MAKEINTRESOURCE(IDD_DLG_ABOUT), hDlg,(DLGPROC)AboutProc);  return TRUE; case WM_CLOSE:  DestroyWindow(hDlg);  hMainDlg = NULL;  return TRUE; } return FALSE;}/*IDD_DLG_ABOUT*/BOOL CALLBACK AboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG:  return TRUE; case WM_CLOSE:  EndDialog(hDlg,NULL);  hMainDlg = NULL;  return TRUE; case WM_COMMAND:  if(LOWORD(wParam)==IDOK)   SendMessage(hDlg,WM_CLOSE,0,0);  return TRUE;  }  return FALSE;}



程序实现的过程:
先产生一个控制台(黑洞洞的cmd),然后弹出一个对话框(IDD_DLG_MAIN),点击上面的确认按钮,弹出第二个对话框(IDD_DLG_ABOUT),包含了一个Picture control和一个静态文本标签。

原文地址:控制台主程序通过调用DLL显示对话框
0 0
原创粉丝点击