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
原创粉丝点击