21xrx.com
2025-03-26 13:21:49 Wednesday
文章检索 我的文章 写文章
如何使用C++创建模态窗口来调用外部EXE程序
2023-07-03 04:40:19 深夜i     --     --
C++ 模态窗口 调用外部EXE程序 创建 使用

C++是一种强大的编程语言,它能够让开发者创建出各种各样的应用程序。这篇文章将介绍如何使用C++创建模态窗口来调用外部EXE程序。

首先,我们需要了解模态窗口和非模态窗口的区别。模态窗口一般用于需要用户输入一些信息或进行某些操作的情况,而非模态窗口一般用于显示一些提示信息或者展示数据。

在C++中创建一个模态窗口需要使用到WinAPI中的一些函数,如CreateWindowEx、DialogBoxParam等。下面是一个简单的实例代码:

c++
#include <Windows.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  switch (message)
  {
    case WM_DESTROY:
      PostQuitMessage(0);
      break;
    default:
      return DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
}
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  // 注册窗口类
  WNDCLASSEX wcex = { sizeof(WNDCLASSEX) };
  wcex.lpfnWndProc = WndProc;
  wcex.hInstance = hInstance;
  wcex.lpszClassName = TEXT("MyWindowClass");
  RegisterClassEx(&wcex);
  // 创建窗口
  HWND hWnd = CreateWindowEx(0, TEXT("MyWindowClass"), TEXT("My Window"), WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, NULL, NULL, hInstance, NULL);
  // 创建模态窗口
  int ret = DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, (DLGPROC)DialogProc, 0);
  // 显示窗口
  ShowWindow(hWnd, nCmdShow);
  // 消息循环
  MSG msg = { 0 };
  while (GetMessage(&msg, NULL, 0, 0))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return (int)msg.wParam;
}

以上代码展示了如何创建一个窗口并在其中嵌入一个模态窗口。其中DialogBoxParam函数用于创建模态窗口,第一个参数为应用程序实例句柄,第二个参数为对话框的资源ID,第三个参数为父窗口句柄,第四个参数为对话框的回调函数。

接下来,我们要在模态窗口中调用外部EXE程序。下面是一个示例代码:

c++
#include <Windows.h>
#include <ShellAPI.h>
INT_PTR CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
  switch (message)
  {
    case WM_INITDIALOG:
      return TRUE;
    case WM_COMMAND:
      {
        if (LOWORD(wParam) == IDC_BUTTON1 && HIWORD(wParam) == BN_CLICKED)
        {
          // 调用外部EXE程序
          ShellExecute(NULL, TEXT("open"), TEXT("C:\\Windows\\System32\\notepad.exe"), NULL, NULL, SW_SHOWNORMAL);
        }
        if (LOWORD(wParam) == IDC_BUTTON2 && HIWORD(wParam) == BN_CLICKED)
        {
          EndDialog(hDlg, TRUE);
        }
      }
      break;
  }
  return (INT_PTR)FALSE;
}

以上代码用于在模态窗口中添加两个按钮,一个用于调用外部EXE程序,另一个用于关闭模态窗口。当用户点击“调用外部EXE程序”按钮时,程序会调用ShellExecute函数以启动一个指定的程序。

综上,我们可以使用上述代码来创建模态窗口并调用外部EXE程序。当然,这只是一个简单的示例,开发者可以根据自己的需求进行修改和扩展。

  
  

评论区