一派掌門 二十級 |
【源文件】 #include <fstream> #include <Shlwapi.h> #include <tchar.h> #include <Windows.h> #include <windowsx.h> #include <CommCtrl.h> #include "resource.h" #include "main.h"
#pragma comment(lib, "Comctl32.lib") #pragma comment(lib, "Shlwapi.lib") #pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
using namespace std;
BOOL bEndian = FALSE; BOOL bMouseTracking = FALSE; DWORD64 dwFileSize = 0; HINSTANCE hInst; HWND hWnd, hwndToolbar, hwndStatus, hwndView; TCHAR szFileName[MAX_PATH]; UINT wIDs[] = {MH_BASE, IDS_STRING30000, 0, 0};
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { BOOL bFound = FALSE; int nArgs; LPWSTR *szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); LPWSTR szWarning = NULL; if (nArgs >= 2) { if (PathFileExistsW(szArglist[1]) && !PathIsDirectoryW(szArglist[1])) { #ifdef _UNICODE _tcscpy_s(szFileName, szArglist[1]); #else WideCharToMultiByte(CP_ACP, NULL, szArglist[1], -1, szFileName, sizeof(szFileName), NULL, NULL); #endif bFound = TRUE; } else { szWarning = new WCHAR[MAX_PATH + 120]; if (wcslen(szArglist[1]) >= MAX_PATH) wcscpy_s(szWarning, MAX_PATH, L"指定的文件路径太长!"); else swprintf_s(szWarning, MAX_PATH + 120, L"文件 \"%s\" 不存在。\n请检查文件名是否正确,然后再试一次。", szArglist[1]); } } if (bFound == FALSE) GetModuleFileName(NULL, szFileName, MAX_PATH); LocalFree(szArglist);
WNDCLASSEX wcex; wcex.cbClsExtra = wcex.cbWndExtra = 0; wcex.cbSize = sizeof(WNDCLASSEX); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wcex.hInstance = hInst = hInstance; wcex.lpfnWndProc = WndProc; wcex.lpszClassName = TEXT("MainWindow"); wcex.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); wcex.style = NULL; RegisterClassEx(&wcex);
HWND hWnd = CreateWindow(wcex.lpszClassName, TEXT("Pixel Viewer"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) return 1;
if (szWarning != NULL) { MessageBoxW(hWnd, szWarning, L"打开文件失败", MB_ICONWARNING); delete[] szWarning; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
HACCEL hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1)); MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(hWnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam; }
INT_PTR CALLBACK AboutProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { int wmId; switch (uMsg) { case WM_COMMAND: wmId = LOWORD(wParam); switch (wmId) { case IDOK: case IDCANCEL: EndDialog(hDlg, wmId); break; } break; case WM_INITDIALOG: SendDlgItemMessage(hDlg, IDC_ICON1, STM_SETICON, (WPARAM)GetClassLongPtr(hWnd, GCLP_HICON), NULL); return TRUE; } return FALSE; }
INT_PTR CALLBACK SizeDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { int wmId; RECT rect, rcView, rcClient; switch (uMsg) { case WM_COMMAND: wmId = LOWORD(wParam); switch (wmId) { case IDOK: rcClient.top = rcClient.left = 0; rcClient.right = SendDlgItemMessage(hDlg, IDC_SPIN1, UDM_GETPOS32, NULL, NULL); rcClient.bottom = SendDlgItemMessage(hDlg, IDC_SPIN2, UDM_GETPOS32, NULL, NULL);
GetWindowRect(hwndToolbar, &rect); rcClient.bottom += rect.bottom - rect.top - 1; GetWindowRect(hwndStatus, &rect); rcClient.bottom += rect.bottom - rect.top;
GetWindowRect(hWnd, &rect); AdjustWindowRect(&rcClient, WS_OVERLAPPEDWINDOW, TRUE); MoveWindow(hWnd, rect.left, rect.top, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, TRUE); case IDCANCEL: EndDialog(hDlg, wmId); break; } break; case WM_INITDIALOG: GetClientRect(hwndView, &rcView); GetClientRect(hWnd, &rcClient); SendDlgItemMessage(hDlg, IDC_SPIN1, UDM_SETRANGE32, 0, (LPARAM)(GetSystemMetrics(SM_CXSCREEN) * 1.5)); SendDlgItemMessage(hDlg, IDC_SPIN2, UDM_SETRANGE32, 0, (LPARAM)(GetSystemMetrics(SM_CYSCREEN) * 1.5)); SendDlgItemMessage(hDlg, IDC_SPIN1, UDM_SETPOS32, NULL, rcClient.right - rcClient.left); SendDlgItemMessage(hDlg, IDC_SPIN2, UDM_SETPOS32, NULL, rcView.bottom - rcView.top); return TRUE; } return FALSE; }
LRESULT CALLBACK ViewWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { BITMAPINFO bmi; BYTE *p, *pBits; BYTE bTemp; HBITMAP hbmp; HBRUSH hbrBackground; HDC hdc, hdcMem; ifstream *file; int x, y; int nLineLen, nNewPos, nOldVertPos; PAINTSTRUCT ps; RECT rcClient, rcMem; SCROLLINFO si; TCHAR szText[50]; TRACKMOUSEEVENT tme; UINT uTemp, offsetY;
switch (uMsg) { case WM_ERASEBKGND: // 重绘窗口时不自动擦除内容 break; case WM_MOUSELEAVE: SendMessage(hwndStatus, SB_SETTEXT, 1, NULL); SendMessage(hwndStatus, SB_SETTEXT, 2, NULL); bMouseTracking = FALSE; break; case WM_MOUSEMOVE: if (bMouseTracking == FALSE) { tme.cbSize = sizeof(TRACKMOUSEEVENT); tme.dwFlags = TME_LEAVE; tme.hwndTrack = hWnd; _TrackMouseEvent(&tme); bMouseTracking = TRUE; } x = GET_X_LPARAM(lParam); y = GET_Y_LPARAM(lParam); _stprintf_s(szText, TEXT("(%d, %d)"), x, y); SendMessage(hwndStatus, SB_SETTEXT, 1, (LPARAM)szText); update_color_text(x, y, szText, sizeof(szText) / sizeof(TCHAR)); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rcClient); SetRect(&rcMem, 0, 0, ps.rcPaint.right - ps.rcPaint.left, ps.rcPaint.bottom - ps.rcPaint.top); if (rcMem.bottom > 0) { ZeroMemory(&bmi, sizeof(BITMAPINFO)); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = rcMem.right; bmi.bmiHeader.biHeight = rcMem.bottom; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 24; bmi.bmiHeader.biCompression = BI_RGB; hbmp = CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, (LPVOID *)&pBits, NULL, NULL); hdcMem = CreateCompatibleDC(hdc); SelectObject(hdcMem, hbmp); hbrBackground = (HBRUSH)GetClassLongPtr(hWnd, GCLP_HBRBACKGROUND); FillRect(hdcMem, &rcMem, hbrBackground); offsetY = GetScrollPos(hWnd, SB_VERT);
if (PathFileExists(szFileName)) { file = new ifstream(szFileName, ios::binary); for (y = 0; y < rcMem.bottom; y++) { file->seekg((offsetY + ps.rcPaint.top + y) * (rcClient.right - rcClient.left) * 3 + ps.rcPaint.left * 3, ios::beg); if (file->eof()) break; uTemp = rcMem.bottom - y - 1; nLineLen = rcMem.right * 3; if (nLineLen % 4 != 0) nLineLen += 4 - nLineLen % 4; p = pBits + uTemp * nLineLen; file->read((char *)p, rcMem.right * 3); if (bEndian == TRUE) // big { for (x = 0; x < rcMem.right; x++) { bTemp = *p; *p = *(p + 2); *(p + 2) = bTemp; p += 3; } } } file->close(); delete file; } BitBlt(hdc, ps.rcPaint.left, ps.rcPaint.top, rcMem.right, rcMem.bottom, hdcMem, 0, 0, SRCCOPY); DeleteDC(hdcMem); DeleteObject(hbmp); }
EndPaint(hWnd, &ps); break; case WM_VSCROLL: si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE | SIF_TRACKPOS; GetScrollInfo(hWnd, SB_VERT, &si); switch (LOWORD(wParam)) { case SB_TOP: nNewPos = si.nMin; break; case SB_LINEUP: nNewPos = si.nPos - SCROLL_LINE; break; case SB_LINEDOWN: nNewPos = si.nPos + SCROLL_LINE; break; case SB_PAGEUP: nNewPos = si.nPos - si.nPage; break; case SB_PAGEDOWN: nNewPos = si.nPos + si.nPage; break; case SB_BOTTOM: nNewPos = si.nMax; break; case SB_THUMBTRACK: nNewPos = si.nTrackPos; break; default: return FALSE; } nOldVertPos = SetScrollPos(hWnd, SB_VERT, nNewPos, TRUE); nNewPos = GetScrollPos(hWnd, SB_VERT); if (nNewPos != nOldVertPos) InvalidateRect(hWnd, NULL, FALSE); break; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } return FALSE; }
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { int aParts[3]; int nLines, nNewPos, nOldVertPos; int wmId; RECT rcClient; ULONG ulScrollLines;
switch (uMsg) { case WM_COMMAND: wmId = LOWORD(wParam); switch (wmId) { case IDM_OPEN: open_file(); break; case IDM_EXIT: DestroyWindow(hWnd); break; case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, AboutProc); break; case IDM_BE: if (bEndian == FALSE) { bEndian = TRUE; update_menu(); InvalidateRect(hwndView, NULL, FALSE); } break; case IDM_LE: if (bEndian == TRUE) { bEndian = FALSE; update_menu(); InvalidateRect(hwndView, NULL, FALSE); } break; case IDM_CHANGESIZE: DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG2), hWnd, SizeDlgProc); break; } break; case WM_CREATE: ::hWnd = hWnd; // 此时,主函数的CreateWindow函数还未返回,所以只能从参数里获得hWnd toolbar_init(); statusbar_init(); update_menu(); file_init(); view_init(); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_MENUSELECT: MenuHelp(WM_MENUSELECT, wParam, lParam, GetMenu(hWnd), hInst, hwndStatus, wIDs); break; case WM_MOUSEWHEEL: SystemParametersInfo(SPI_GETWHEELSCROLLLINES, NULL, &ulScrollLines, NULL); nLines = GET_WHEEL_DELTA_WPARAM(wParam) / WHEEL_DELTA * ulScrollLines; nNewPos = GetScrollPos(hwndView, SB_VERT) - nLines * SCROLL_LINE; nOldVertPos = SetScrollPos(hwndView, SB_VERT, nNewPos, TRUE); nNewPos = GetScrollPos(hwndView, SB_VERT); if (nOldVertPos != nNewPos) { InvalidateRect(hwndView, NULL, FALSE); update_color_text(); } break; case WM_SIZE: SetRect(&rcClient, 0, 0, LOWORD(lParam), HIWORD(lParam)); SendMessage(hwndToolbar, TB_AUTOSIZE, NULL, NULL); SendMessage(hwndStatus, WM_SIZE, NULL, NULL); aParts[0] = rcClient.right - 300; if (aParts[0] < 200) aParts[0] = 200; aParts[1] = aParts[0] + 100; aParts[2] = -1; SendMessage(hwndStatus, SB_SETPARTS, 3, (LPARAM)aParts); SendMessage(hwndStatus, SB_SETTEXT, 0, (LPARAM)TEXT("就绪")); view_resize(&rcClient); break; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } return FALSE; }
void calc_view_pos(POINT *pt, SIZE *size) { RECT rcClient, rcToolbarWnd, rcStatusbarWnd; GetClientRect(hWnd, &rcClient); GetWindowRect(hwndToolbar, &rcToolbarWnd); GetWindowRect(hwndStatus, &rcStatusbarWnd); pt->x = 0; pt->y = rcToolbarWnd.bottom - rcToolbarWnd.top - 1; size->cx = rcClient.right - rcClient.left; size->cy = rcStatusbarWnd.top - rcToolbarWnd.bottom; }
void file_init(void) { int i = _tcslen(szFileName); TCHAR szTitle[MAX_PATH]; for (; i >= 0; i--) { if (szFileName[i] == '\\' || szFileName[i] == '/' || szFileName[i] == ':') break; } _tcscpy_s(szTitle, szFileName + i + 1); _tcscat_s(szTitle, TEXT(" - Pixel Viewer")); SetWindowText(hWnd, szTitle);
if (PathFileExists(szFileName)) { ifstream file(szFileName, ios::binary); file.seekg(0, ios::end); dwFileSize = file.tellg(); file.close(); } }
void open_file(void) { OPENFILENAME ofn; TCHAR szFile[MAX_PATH] = {0}; ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFile = szFile; ofn.nMaxFile = MAX_PATH; ofn.lpstrFilter = TEXT("所有文件\0*\0"); ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if (GetOpenFileName(&ofn) == TRUE) { _tcscpy_s(szFileName, szFile); file_init(); update_scrollbar(); } }
void toolbar_init(void) { TBBUTTON tbButtons[] = { {STD_FILENEW, IDM_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, NULL, NULL, NULL, (INT_PTR)TEXT("打开")}, {NULL, NULL, TBSTATE_ENABLED, BTNS_SEP, NULL, NULL}, // 显示分隔条需要TBSTYLE_FLAT样式 {STD_HELP, IDM_ABOUT, TBSTATE_ENABLED, TBSTYLE_BUTTON, NULL, NULL, NULL, (INT_PTR)TEXT("关于")} };
hwndToolbar = CreateWindow(TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS, 0, 0, 0, 0, hWnd, NULL, hInst, NULL); SendMessage(hwndToolbar, TB_LOADIMAGES, IDB_STD_SMALL_COLOR, (LPARAM)HINST_COMMCTRL); SendMessage(hwndToolbar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), NULL); SendMessage(hwndToolbar, TB_SETMAXTEXTROWS, 0, NULL); SendMessage(hwndToolbar, TB_ADDBUTTONS, 3, (LPARAM)tbButtons); }
void statusbar_init(void) { hwndStatus = CreateWindow(STATUSCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 0, 0, 0, 0, hWnd, NULL, hInst, NULL); }
void update_color_text(void) { TCHAR szText[50]; POINT pt; GetCursorPos(&pt); ScreenToClient(hwndView, &pt); update_color_text(pt.x, pt.y, szText, sizeof(szText) / sizeof(TCHAR)); }
void update_color_text(int x, int y, LPTSTR szText, size_t nTextMaxLen) { HDC hdc = GetDC(hwndView); COLORREF color = GetPixel(hdc, x, y); ReleaseDC(hwndView, hdc);
RECT rect; DWORD64 dwFilePos = GetScrollPos(hwndView, SB_VERT); GetClientRect(hwndView, &rect); dwFilePos = (dwFilePos + y) * (rect.right - rect.left) + x; dwFilePos *= 3; if (dwFilePos >= dwFileSize) { SendMessage(hwndStatus, SB_SETTEXT, 2, NULL); return; }
if (bEndian == TRUE) color = RGB(GetBValue(color), GetGValue(color), GetRValue(color)); _stprintf_s(szText, nTextMaxLen, TEXT("0x%08I64X: 0x%06X"), dwFilePos, color); SendMessage(hwndStatus, SB_SETTEXT, 2, (LPARAM)szText); }
void update_menu(void) { HMENU hMenu = GetMenu(hWnd); HMENU hSubMenu = GetSubMenu(hMenu, 1); CheckMenuRadioItem(hSubMenu, IDM_LE, IDM_BE, (bEndian == TRUE) ? IDM_BE : IDM_LE, MF_BYCOMMAND); }
void update_scrollbar(void) { RECT rcView; GetClientRect(hwndView, &rcView); if (rcView.right == 0) return; RECT rect; SCROLLINFO si; SetScrollRange(hwndView, SB_VERT, 0, (int)ceil(dwFileSize / (rcView.right * 3)), FALSE); do { rect = rcView; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_PAGE; si.nPage = rect.bottom - rect.top; SetScrollInfo(hwndView, SB_VERT, &si, TRUE); GetClientRect(hwndView, &rcView); } while (memcmp(&rcView, &rect, sizeof(RECT)) != 0); InvalidateRect(hwndView, NULL, FALSE); }
void view_init(void) { POINT pt; SIZE size; calc_view_pos(&pt, &size);
WNDCLASS wcView; ZeroMemory(&wcView, sizeof(WNDCLASS)); wcView.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcView.hCursor = LoadCursor(NULL, IDC_ARROW); wcView.hInstance = hInst; wcView.lpfnWndProc = ViewWndProc; wcView.lpszClassName = TEXT("PixelViewer View"); RegisterClass(&wcView);
hwndView = CreateWindow(wcView.lpszClassName, NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL, pt.x, pt.y, size.cx, size.cy, hWnd, NULL, wcView.hInstance, NULL); }
void view_resize(RECT *rcClient) { POINT pt; SIZE size; calc_view_pos(&pt, &size); MoveWindow(hwndView, pt.x, pt.y, size.cx, size.cy, TRUE); update_scrollbar(); }
|
一派掌門 二十級 |
【资源文件】 // Microsoft Visual C++ generated resource script. // #include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h"
///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS
///////////////////////////////////////////////////////////////////////////// // 中文(简体,中国) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE //
1 TEXTINCLUDE BEGIN "resource.h\0" END
2 TEXTINCLUDE BEGIN "#include ""afxres.h""\r\n" "\0" END
3 TEXTINCLUDE BEGIN "\r\n" "\0" END
#endif // APSTUDIO_INVOKED
///////////////////////////////////////////////////////////////////////////// // // Menu //
IDR_MENU1 MENU BEGIN POPUP "文件(&F)" BEGIN MENUITEM "打开(&O)...\tCtrl+O", IDM_OPEN MENUITEM SEPARATOR MENUITEM "退出(&E)", IDM_EXIT END POPUP "查看(&V)" BEGIN MENUITEM "小端字节序(&L)", IDM_LE MENUITEM "大端字节序(&B)", IDM_BE MENUITEM SEPARATOR MENUITEM "更改窗口大小(&C)...", IDM_CHANGESIZE END POPUP "帮助(&H)" BEGIN MENUITEM "关于(&A)...\tAlt+/", IDM_ABOUT END END
///////////////////////////////////////////////////////////////////////////// // // Dialog //
IDD_DIALOG1 DIALOGEX 20, 20, 175, 77 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "关于 Pixcel Viewer" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN ICON "",IDC_ICON1,7,8,21,20 LTEXT "Pixcel Viewer, 版本 V1.0",IDC_STATIC,38,10,85,8 LTEXT "作者: 巨大八爪鱼",IDC_STATIC,38,22,62,8 LTEXT "Copyright (C) Octopus Studio 2016",IDC_STATIC,38,39,113,8 DEFPUSHBUTTON "确定",IDOK,119,56,50,14 END
IDD_DIALOG2 DIALOGEX 20, 20, 161, 82 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "更改窗口大小" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN GROUPBOX "新窗口尺寸",IDC_STATIC,7,7,147,49 EDITTEXT IDC_EDIT1,22,26,40,14,ES_AUTOHSCROLL CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,61,25,10,14 LTEXT "x",IDC_STATIC,74,28,8,8 EDITTEXT IDC_EDIT2,86,26,40,14,ES_AUTOHSCROLL CONTROL "",IDC_SPIN2,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,128,25,10,14 DEFPUSHBUTTON "确定",IDOK,50,61,50,14 PUSHBUTTON "取消",IDCANCEL,104,61,50,14 END
///////////////////////////////////////////////////////////////////////////// // // Accelerator //
IDR_ACCELERATOR1 ACCELERATORS BEGIN "/", IDM_ABOUT, ASCII, ALT, NOINVERT "O", IDM_OPEN, VIRTKEY, CONTROL, NOINVERT END
///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO //
#ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO BEGIN IDD_DIALOG1, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 168 TOPMARGIN, 7 BOTTOMMARGIN, 70 END
IDD_DIALOG2, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 154 TOPMARGIN, 7 BOTTOMMARGIN, 75 END END #endif // APSTUDIO_INVOKED
///////////////////////////////////////////////////////////////////////////// // // Version //
VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x0L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "080404b0" BEGIN VALUE "CompanyName", "八爪鱼工作室" VALUE "FileDescription", "文件数据分布图查看器" VALUE "FileVersion", "1.0.0.1" VALUE "InternalName", "Pixel Viewer" VALUE "LegalCopyright", "Copyright (C)Octopus Studio 2016" VALUE "OriginalFilename", "pixelviewer.exe" VALUE "ProductName", "Pixel Viewer" VALUE "ProductVersion", "1.0.0.1" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x804, 1200 END END
///////////////////////////////////////////////////////////////////////////// // // String Table //
STRINGTABLE BEGIN IDS_STRING40103 "退出程序。" IDS_STRING40104 "打开一个文件。" IDS_STRING40106 "显示关于本程序的一些详细信息。" END
STRINGTABLE BEGIN IDS_STRING40112 "以""蓝、绿、红""的字节顺序显示颜色。" IDS_STRING40113 "以""红、绿、蓝""的字节顺序显示颜色。" IDS_STRING40115 "更改窗口大小和图像的显示大小。" END
STRINGTABLE BEGIN IDS_STRING30000 "文件菜单" IDS_STRING30001 "查看菜单" IDS_STRING30002 "帮助菜单" END
#endif // 中文(简体,中国) resources /////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. //
///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED
|