日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Visual C++ MFC——基于Shell的Windows GUI小程序DEMO(打开计算器|打开记事本|IP查询|Windows激活状态查询)

發(fā)布時(shí)間:2024/10/5 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Visual C++ MFC——基于Shell的Windows GUI小程序DEMO(打开计算器|打开记事本|IP查询|Windows激活状态查询) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基本概念

Shell

Shell 是一個(gè)用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設(shè)計(jì)語言。

Shell 是指一種應(yīng)用程序,這個(gè)應(yīng)用程序提供了一個(gè)界面,用戶通過這個(gè)界面訪問操作系統(tǒng)內(nèi)核的服務(wù)。

API

#include "stdio.h" //輸入和輸出 #include "assert.h" //用于驗(yàn)證程序做出的假設(shè),并在假設(shè)為假時(shí)輸出診斷消息。 #include "windows.h" //window程序需要的重要頭文件,封裝了許多庫函數(shù)以及一些類,將一些復(fù)雜的工作由庫函數(shù)處理。 #include "shellapi.h" //Shell API

開發(fā)環(huán)境?

Visual Studio 2019?

操作步驟

1、創(chuàng)建新項(xiàng)目?

2、打開資源視圖

視圖->其他視圖->資源視圖

快捷鍵:Ctrl+Shift+E

3、新建對話框?

4、GUI設(shè)計(jì)

注:?

1、在屬性欄中找到對應(yīng)的Caption屬性便可以修改顯示文字

2、點(diǎn)擊左側(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)用程序的入口點(diǎn)。 //#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)前實(shí)例 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): 保存實(shí)例句柄并創(chuàng)建主窗口 // // 注釋: // // 在此函數(shù)中,我們在全局變量中保存實(shí)例句柄并 // 創(chuàng)建和顯示主程序窗口。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) {hInst = hInstance; // 將實(shí)例句柄存儲在全局變量中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; }

運(yùn)行結(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。