Visual C++ MFC——基于Shell的Windows GUI小程序DEMO(打开计算器|打开记事本|IP查询|Windows激活状态查询)
生活随笔
收集整理的這篇文章主要介紹了
Visual C++ MFC——基于Shell的Windows GUI小程序DEMO(打开计算器|打开记事本|IP查询|Windows激活状态查询)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
基本概念
Shell:
Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設(shè)計語言。
Shell 是指一種應(yīng)用程序,這個應(yīng)用程序提供了一個界面,用戶通過這個界面訪問操作系統(tǒng)內(nèi)核的服務(wù)。
API
#include "stdio.h" //輸入和輸出 #include "assert.h" //用于驗證程序做出的假設(shè),并在假設(shè)為假時輸出診斷消息。 #include "windows.h" //window程序需要的重要頭文件,封裝了許多庫函數(shù)以及一些類,將一些復(fù)雜的工作由庫函數(shù)處理。 #include "shellapi.h" //Shell API開發(fā)環(huán)境?
Visual Studio 2019?
操作步驟
1、創(chuàng)建新項目?
2、打開資源視圖
視圖->其他視圖->資源視圖
快捷鍵:Ctrl+Shift+E
3、新建對話框?
4、GUI設(shè)計
注:?
1、在屬性欄中找到對應(yīng)的Caption屬性便可以修改顯示文字
2、點擊左側(cè)的工具箱,可以拖動Button控件到界面上
源代碼
分析菜單選擇?
// 分析菜單選擇:switch (wmId){case IDM_ABOUT:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_TOOL:DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, Tool);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}消息處理
// “工具”框的消息處理程序。 INT_PTR CALLBACK Tool(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {UNREFERENCED_PARAMETER(lParam);printf("%ud",message);switch (message){case WM_INITDIALOG:return (INT_PTR)TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}else if (LOWORD(wParam) == IDC_BUTTON1) {HINSTANCE hRslt = ShellExecute(NULL, _T("open"),_T("calc.exe"), NULL, NULL, SW_SHOWNORMAL);assert(hRslt > (HINSTANCE)HINSTANCE_ERROR);}else if (LOWORD(wParam) == IDC_BUTTON2) {HINSTANCE hRslt = ShellExecute(NULL, _T("open"),_T("notepad.EXE"), NULL, NULL, SW_SHOWNORMAL);assert(hRslt > (HINSTANCE)HINSTANCE_ERROR);}else if (LOWORD(wParam) == IDC_BUTTON3) {HINSTANCE hRslt = ShellExecute(NULL, _T("open"),_T("Nslookup.EXE"), NULL, NULL, SW_SHOWNORMAL);assert(hRslt > (HINSTANCE)HINSTANCE_ERROR);}else if (LOWORD(wParam) == IDC_BUTTON4) {HINSTANCE hRslt = ShellExecute(NULL, _T("open"),_T("slmgr.vbs"), L"-xpr", NULL, SW_SHOWNORMAL);assert(hRslt > (HINSTANCE)HINSTANCE_ERROR);}break;}return (INT_PTR)FALSE; }全部主要代碼
// Project3.cpp : 定義應(yīng)用程序的入口點。 //#include "framework.h" #include "Project3.h" #include "stdio.h" #include "assert.h" #include "windows.h " #include "shellapi.h " #define MAX_LOADSTRING 100// 全局變量: HINSTANCE hInst; // 當(dāng)前實例 WCHAR szTitle[MAX_LOADSTRING]; // 標(biāo)題欄文本 WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口類名// 此代碼模塊中包含的函數(shù)的前向聲明: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK Tool(HWND, UINT, WPARAM, LPARAM);int APIENTRY wWinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPWSTR lpCmdLine,_In_ int nCmdShow) {UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// TODO: 在此處放置代碼。// 初始化全局字符串LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadStringW(hInstance, IDC_PROJECT3, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// 執(zhí)行應(yīng)用程序初始化:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_PROJECT3));MSG msg;// 主消息循環(huán):while (GetMessage(&msg, nullptr, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return (int) msg.wParam; }// // 函數(shù): MyRegisterClass() // // 目標(biāo): 注冊窗口類。 // ATOM MyRegisterClass(HINSTANCE hInstance) {WNDCLASSEXW wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WndProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_PROJECT3));wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_PROJECT3);wcex.lpszClassName = szWindowClass;wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));return RegisterClassExW(&wcex); }// // 函數(shù): InitInstance(HINSTANCE, int) // // 目標(biāo): 保存實例句柄并創(chuàng)建主窗口 // // 注釋: // // 在此函數(shù)中,我們在全局變量中保存實例句柄并 // 創(chuàng)建和顯示主程序窗口。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) {hInst = hInstance; // 將實例句柄存儲在全局變量中HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);if (!hWnd){return FALSE;}ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);return TRUE; }// // 函數(shù): WndProc(HWND, UINT, WPARAM, LPARAM) // // 目標(biāo): 處理主窗口的消息。 // // WM_COMMAND - 處理應(yīng)用程序菜單 // WM_PAINT - 繪制主窗口 // WM_DESTROY - 發(fā)送退出消息并返回 // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {switch (message){case WM_COMMAND:{int wmId = LOWORD(wParam);// 分析菜單選擇:switch (wmId){case IDM_ABOUT:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_TOOL:DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, Tool);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}}break;case WM_PAINT:{PAINTSTRUCT ps;RECT rect;HDC hdc = BeginPaint(hWnd, &ps);// TODO: 在此處添加使用 hdc 的任何繪圖代碼...GetClientRect(hWnd, &rect); DrawText(hdc, TEXT("Hello World!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);EndPaint(hWnd, &ps);}break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0; }// “關(guān)于”框的消息處理程序。 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {UNREFERENCED_PARAMETER(lParam);switch (message){case WM_INITDIALOG:return (INT_PTR)TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}break;}return (INT_PTR)FALSE; }// “工具”框的消息處理程序。 INT_PTR CALLBACK Tool(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {UNREFERENCED_PARAMETER(lParam);printf("%ud",message);switch (message){case WM_INITDIALOG:return (INT_PTR)TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}else if (LOWORD(wParam) == IDC_BUTTON1) {HINSTANCE hRslt = ShellExecute(NULL, _T("open"),_T("calc.exe"), NULL, NULL, SW_SHOWNORMAL);assert(hRslt > (HINSTANCE)HINSTANCE_ERROR);}else if (LOWORD(wParam) == IDC_BUTTON2) {HINSTANCE hRslt = ShellExecute(NULL, _T("open"),_T("notepad.EXE"), NULL, NULL, SW_SHOWNORMAL);assert(hRslt > (HINSTANCE)HINSTANCE_ERROR);}else if (LOWORD(wParam) == IDC_BUTTON3) {HINSTANCE hRslt = ShellExecute(NULL, _T("open"),_T("Nslookup.EXE"), NULL, NULL, SW_SHOWNORMAL);assert(hRslt > (HINSTANCE)HINSTANCE_ERROR);}else if (LOWORD(wParam) == IDC_BUTTON4) {HINSTANCE hRslt = ShellExecute(NULL, _T("open"),_T("slmgr.vbs"), L"-xpr", NULL, SW_SHOWNORMAL);assert(hRslt > (HINSTANCE)HINSTANCE_ERROR);}break;}return (INT_PTR)FALSE; }運行結(jié)果
參考文章
https://blog.csdn.net/zmdsjtu/article/details/52311107
https://www.cnblogs.com/hengxilee/articles/5432496.html
https://blog.csdn.net/Jailman/article/details/86690444
總結(jié)
以上是生活随笔為你收集整理的Visual C++ MFC——基于Shell的Windows GUI小程序DEMO(打开计算器|打开记事本|IP查询|Windows激活状态查询)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio 2019 +
- 下一篇: JAVA——基于HttpClient的全