 |
【源文件】 #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
|