SDK:对话框,光标,字符串,位图,应用图标,语言
来源:互联网 发布:金蝶软件数据库职位 编辑:程序博客网 时间:2024/06/05 19:20
代码下载地址:SDK:对话框,光标,字符串,位图,应用图标,语言
程序运行结果展示
// SDK.cpp : 定义应用程序的入口点。#include "stdafx.h"#include "SDK.h"#include "cstdio"#include <commdlg.h>#define MAX_LOADSTRING 100// 全局变量: HINSTANCE hInst; // 当前实例WCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名HWND hDlgModeless;// 此代码模块中包含的函数的前向声明: ATOM MyRegisterClass(HINSTANCE hInstance);BOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);INT_PTR CALLBACK CHOSEBITMAP(HWND, UINT, WPARAM, LPARAM);INT_PTR CALLBACK RADIOBITMAP(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_SDK, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // 执行应用程序初始化: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR)); MSG msg; // 主消息循环: while (GetMessage(&msg, nullptr, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam;}//// 函数: MyRegisterClass()//// 目的: 注册窗口类。//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_ICON1)); wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCEW(IDR_CHINESEMENU); wcex.lpszClassName = szWindowClass; wcex.hIconSm = NULL; return RegisterClassExW(&wcex);}//// 函数: InitInstance(HINSTANCE, int)//// 目的: 保存实例句柄并创建主窗口//// 注释: //// 在此函数中,我们在全局变量中保存实例句柄并// 创建和显示主程序窗口。//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;}//// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)//// 目的: 处理主窗口的消息。//// WM_COMMAND - 处理应用程序菜单// WM_PAINT - 绘制主窗口// WM_DESTROY - 发送退出消息并返回////int ChooseCheckBitmap[3] = { 0, 0, 0 }; // 模式对话框的选择标记。int chooseRadioBitmap = 0; // 无模式对话框的选择标记。LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){HMENUhMenu = GetMenu(hWnd);static intIsChinese = 1;static intselectIcon[3] = { 1, 0, 0 };static intselectShow[4] = { 0, 0, 0, 0 };static intselectCursor[3] = { 1, 0, 0 };static HBITMAPhBitmap[3];static intx[3], y[3];switch (message) {case WM_CREATE:CheckMenuRadioItem(hMenu, ID_ICONN1, ID_ICONN3, ID_ICONN1, MF_BYCOMMAND);CheckMenuRadioItem(hMenu, ID_CURSORARROW, ID_CURSORDIY, ID_CURSORARROW, MF_BYCOMMAND);CheckMenuRadioItem(GetMenu(hWnd), ID_CHINESE, ID_ENGLISH, ID_CHINESE, MF_BYCOMMAND);hBitmap[0] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1));//获取位图句柄hBitmap[1] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP2));hBitmap[2] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP3));BITMAPbitmap1, bitmap2, bitmap3;GetObject(hBitmap[0], sizeof(BITMAP), &bitmap1);GetObject(hBitmap[1], sizeof(BITMAP), &bitmap2);GetObject(hBitmap[2], sizeof(BITMAP), &bitmap3);x[0] = bitmap1.bmWidth;y[0] = bitmap1.bmHeight;x[1] = bitmap2.bmWidth;y[1] = bitmap2.bmHeight;x[2] = bitmap3.bmWidth;y[2] = bitmap3.bmHeight;break;case WM_INITMENU:break;case WM_COMMAND:{int wmId = LOWORD(wParam);// 分析菜单选择: switch (wmId){case ID_MODALDIALOG:{DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, CHOSEBITMAP);InvalidateRect(hWnd, NULL, TRUE);}break;case ID_MODALESSDIALOG:{if (!IsWindow(hDlgModeless)){hDlgModeless = CreateDialog (hInst, MAKEINTRESOURCE(IDD_DIALOG2), hWnd, RADIOBITMAP); ShowWindow(hDlgModeless, SW_SHOW);}}break;case ID_FILEDIALOG:{// Initialize OPENFILENAMEOPENFILENAME ofn;char szFile[260] = " ";ZeroMemory(&ofn, sizeof(OPENFILENAME)); //清零ofn.lStructSize = sizeof(OPENFILENAME); //用来表示win版本ofn.hwndOwner = hWnd; //对话框父窗口ofn.lpstrFile = (LPWSTR)szFile; //存放地址ofn.nMaxFile = sizeof(szFile);ofn.lpstrFilter = TEXT("All(*.*)\0 *.*\0Text(*.txt)\0 * .TXT\0PDF Files(*.pdf)\0 * .PDF\0"); //限制类型ofn.nFilterIndex = 1; //初始选中是那个 1表示第二个(txt)ofn.lpstrFileTitle = NULL;ofn.nMaxFileTitle = 0;ofn.lpstrInitialDir = NULL;ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;// Display the Open dialog box.if (GetOpenFileName(&ofn) == TRUE)MessageBox(hWnd, (LPWSTR)szFile, TEXT("文件名"), MB_OK);}break;case ID_ABOUT:{LPCTSTR MyInformation = TEXT("第5次上机练习(SDK)\n对话框、光标、字符串、位图\n\n学号:***********\n姓名:***");MessageBox(hWnd, MyInformation, TEXT("Lab5(SDK)"), MB_OK | MB_ICONASTERISK);}break;case ID_EXIT:DestroyWindow(hWnd);break;case ID_ICONN1:case ID_ICONN2:case ID_ICONN3:{int selectID = wmId - ID_ICONN1;if (!selectIcon[selectID]) //用selectIcon数组判断当前菜单项是不是已经选择过了{if (MessageBox(hWnd, TEXT("确认要修改吗?"), TEXT("Confirmation"), MB_YESNO | MB_ICONQUESTION) == IDYES)//选择了YES{for (int i = 0; i < 3; i++)selectIcon[i] = 0;selectIcon[selectID] = 1;//用圆形标记选中项,并清除其他选项的标记CheckMenuRadioItem(hMenu, ID_ICONN1, ID_ICONN3, wmId, MF_BYCOMMAND);//同步改变标题栏和桌面应用的图标SetClassLong(hWnd, GCL_HICON, (LONG)LoadIcon(hInst, MAKEINTRESOURCE(selectID + IDI_ICON1)));//如果选择的是图标3,就灰化“显示”菜单if (wmId == ID_ICONN3)EnableMenuItem(hMenu, 2, MF_GRAYED | MF_BYPOSITION);elseEnableMenuItem(hMenu, 2, MF_ENABLED | MF_BYPOSITION);}}DrawMenuBar(hWnd); //更新菜单InvalidateRgn(hWnd, NULL, TRUE); //更新窗口}break;case ID_SHOW1:case ID_SHOW2:case ID_SHOW3:case ID_SHOW4:{if (CheckMenuItem(hMenu, wmId, MF_CHECKED) == MF_CHECKED){CheckMenuItem(hMenu, wmId, MF_UNCHECKED);selectShow[wmId - ID_SHOW1] = 0;}elseselectShow[wmId - ID_SHOW1] = 1;InvalidateRgn(hWnd, NULL, TRUE); //更新窗口}break;case ID_CURSORARROW:case ID_CURSORCROSS:case ID_CURSORDIY:{CheckMenuRadioItem(hMenu, ID_CURSORARROW, ID_CURSORDIY, wmId, MF_BYCOMMAND);for (int i = 0; i < 3; i++)selectCursor[i] = 0;if (wmId == ID_CURSORARROW){SetClassLong(hWnd, GCLP_HCURSOR, (LONG)LoadCursor(NULL, IDC_ARROW));selectCursor[0] = 1;}else if (wmId == ID_CURSORCROSS){SetClassLong(hWnd, GCLP_HCURSOR, (LONG)LoadCursor(NULL, IDC_CROSS));selectCursor[1] = 1;}else{SetClassLong(hWnd, GCLP_HCURSOR, (LONG)LoadCursor(hInst, MAKEINTRESOURCE(IDC_CURSOR)));selectCursor[2] = 1;}InvalidateRgn(hWnd, NULL, TRUE); //更新窗口}break;case ID_ENGLISH:{//切换成英文菜单并销毁原菜单SetMenu(hWnd, LoadMenu(hInst, MAKEINTRESOURCE(IDR_ENGLISHMENU)));DestroyMenu(hMenu);CheckMenuRadioItem(GetMenu(hWnd), ID_CHINESE, ID_ENGLISH, wmId, MF_BYCOMMAND);CheckMenuRadioItem(GetMenu(hWnd), ID_ICONN1, ID_ICONN3, ID_ICONN1, MF_BYCOMMAND);CheckMenuRadioItem(GetMenu(hWnd), ID_CURSORARROW, ID_CURSORDIY, ID_CURSORARROW, MF_BYCOMMAND);IsChinese = 0;SetWindowText(hWnd, TEXT("Lab(WX)")); //更改标题InvalidateRgn(hWnd, NULL, TRUE); //更新窗口}break;case ID_CHINESE:{//切换成中文菜单并销毁原菜单SetMenu(hWnd, LoadMenu(hInst, MAKEINTRESOURCE(IDR_CHINESEMENU)));DestroyMenu(hMenu);CheckMenuRadioItem(GetMenu(hWnd), ID_CHINESE, ID_ENGLISH, wmId, MF_BYCOMMAND);CheckMenuRadioItem(GetMenu(hWnd), ID_ICONN1, ID_ICONN3, ID_ICONN1, MF_BYCOMMAND);CheckMenuRadioItem(GetMenu(hWnd), ID_CURSORARROW, ID_CURSORDIY, ID_CURSORARROW, MF_BYCOMMAND);IsChinese = 1;SetWindowText(hWnd, szTitle); //更改标题InvalidateRgn(hWnd, NULL, TRUE); //更新窗口}break;default:return DefWindowProc(hWnd, message, wParam, lParam);}}break;case WM_PAINT:{PAINTSTRUCT ps;HDC hdc = BeginPaint(hWnd, &ps);static LPCTSTRIconState[4], CursorState[3];//显示"图标"信息if (IsChinese){IconState[0] = TEXT("当前使用的图标:图标1"); IconState[1] = TEXT("当前使用的图标:图标2");IconState[2] = TEXT("当前使用的图标:图标3");}else{IconState[0] = TEXT("Current icon:Icon1"); IconState[1] = TEXT("Current icon:Icon2");IconState[2] = TEXT("Current icon:Icon3");}for (int i = 0; i < 3; i++){if (selectIcon[i])TextOut(hdc, 10, 10, IconState[i], lstrlen(IconState[i]));}//显示"光标"信息if (IsChinese){CursorState[0] = TEXT("当前使用的光标:光标1"); CursorState[1] = TEXT("当前使用的光标:光标2");CursorState[2] = TEXT("当前使用的光标:光标3");}else{CursorState[0] = TEXT("Current cursor:Cursor1"); CursorState[1] = TEXT("Current cursor:Cursor2");CursorState[2] = TEXT("Current cursor:Cursor3"); }for (int i = 0; i < 3; i++){if (selectCursor[i])TextOut(hdc, 10, 30, CursorState[i], lstrlen(CursorState[i]));}//显示"显示"信息LPCTSTR ShowText[4];if (IsChinese){ShowText[0] = TEXT("显示1"); ShowText[1] = TEXT("显示2");ShowText[2] = TEXT("显示3"); ShowText[3] = TEXT("显示4");}else{ShowText[0] = TEXT("Show1"); ShowText[1] = TEXT("Show2");ShowText[2] = TEXT("Show3"); ShowText[3] = TEXT("Show4");}for (int i = 0; i < 4; i++){if (selectShow[i])TextOut(hdc, 50 + (i % 2) * 50, 100 + (i / 2) * 50, ShowText[i], lstrlen(ShowText[i]));}//显示模式对话框的位图HDC hdcc = CreateCompatibleDC(hdc);for (int i = 0; i < 3; i++) {if (ChooseCheckBitmap[i]){SelectObject(hdcc, hBitmap[i]);BitBlt(hdc, 200, 50 + 100 * i, x[i], y[i], hdcc, 0, 0, SRCCOPY);}}SelectObject(hdcc, hBitmap[chooseRadioBitmap - IDC_RADIO1]);BitBlt(hdc, 400, 50, x[chooseRadioBitmap - IDC_RADIO1], y[chooseRadioBitmap - IDC_RADIO1], hdcc, 0, 0, SRCCOPY);//一定不要漏掉DeleteDC(hdcc);EndPaint(hWnd, &ps);}break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam); } return 0;}// 模式对话框的消息处理程序。INT_PTR CALLBACK CHOSEBITMAP(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){ UNREFERENCED_PARAMETER(lParam);switch (message){case WM_INITDIALOG:for (int i = 0; i < 3; i++) //恢复上一次选项{if (ChooseCheckBitmap[i])CheckDlgButton(hDlg, IDC_CHECK1 + i, BST_CHECKED);}break;case WM_COMMAND:switch (LOWORD(wParam)) {case IDC_CHECK1:case IDC_CHECK2:case IDC_CHECK3:{int ci = LOWORD(wParam) - IDC_CHECK1;ChooseCheckBitmap[ci] = !ChooseCheckBitmap[ci];}break;case IDC_OK:EndDialog(hDlg, TRUE);break;case IDC_CANCLE:EndDialog(hDlg, FALSE);break;}break;}return (INT_PTR)FALSE;}// 无模式对话框的消息处理程序。INT_PTR CALLBACK RADIOBITMAP(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){UNREFERENCED_PARAMETER(lParam);static int choose = 0;switch (message){case WM_INITDIALOG:CheckRadioButton(hDlg, IDC_RADIO1, IDC_RADIO3, chooseRadioBitmap);break;case WM_COMMAND:switch (LOWORD(wParam)) {case IDC_RADIO1:case IDC_RADIO2:case IDC_RADIO3:choose = LOWORD(wParam);break;case IDOK:chooseRadioBitmap = choose;InvalidateRect(GetParent(hDlg), NULL, TRUE); // 更新显示break;case IDCANCEL:DestroyWindow(hDlg);break;}break;}return (INT_PTR)FALSE;}
0 0
- SDK:对话框,光标,字符串,位图,应用图标,语言
- wxPython:对话框、光标、字符串、位图
- 图形处理---位图、图标和光标
- Windows资源(二)图标,光标,位图
- MFC更改对话框的图标以及光标
- 在对话框上加载图标或者位图
- 在对话框上加载图标或者位图
- VC编程小技巧之图标、光标及位图
- VC小技巧(二)图标、光标及位图
- VC小技巧(二)图标、光标及位图
- 积累的VC编程--图标、光标及位图(转)
- VC SDK下如何设置对话框左上角的图标
- 图标对话框
- 设置光标显示图标
- c#位图转换图标
- MFC对话框自定义光标
- 设置对话框光标
- 位图应用
- 删数问题(贪心问题)
- 4.变量
- Codeforces 801C Voltage Keepsake 二分+精度
- 问题:absolute
- android4.0.3关于init.c和init.rc
- SDK:对话框,光标,字符串,位图,应用图标,语言
- HTML写诗
- 设计模式之中介者模式
- Leetcode 255. Verify Preorder Sequence in Binary Search Tree
- CSS——“凸排列表”
- 《精彩绝伦的CSS》——布局(一)用轮廓代替边框
- android设备的编译规则
- DAY_02 HTML小白学习笔记
- android产品信息设置