設置 | 登錄 | 註冊

作者共發了9篇帖子。

【原創作品】文件數據分布圖查看器V1.0

1樓 巨大八爪鱼 2016-2-24 23:11




2樓 巨大八爪鱼 2016-2-24 23:13
Windows 7系統下的運行效果:
3樓 巨大八爪鱼 2016-2-24 23:16
【程序主要功能】
將打開的文件數據當作位圖顯示,文件中每三個字節代表一個像素的顏色。
支持位圖顯示寬度的調整,支持大文件的讀取。
4樓 巨大八爪鱼 2016-2-25 11:26

XP下的shell32.dll的文件圖像中還藏有很多Windows徽標哦!
把窗口寬度設為968或969就能看到了。
5樓 巨大八爪鱼 2016-2-25 11:34
6樓 巨大八爪鱼 2016-2-25 11:35
【程序原始碼】
【頭文件】
#define SCROLL_LINE 40

INT_PTR CALLBACK AboutProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK SizeDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void calc_view_pos(POINT *pt, SIZE *size);
void file_init(void);
void open_file(void);
void toolbar_init(void);
void statusbar_init(void);
void update_color_text(void);
void update_color_text(int x, int y, LPTSTR szText, size_t nTextMaxLen);
void update_menu(void);
void update_scrollbar(void);
void view_init(void);
void view_resize(RECT *rcClient);
7樓 巨大八爪鱼 2016-2-25 11:35
【源文件】
#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();
}
8樓 巨大八爪鱼 2016-2-25 11:36
【資源頭文件】
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成的包含文件。
// 供 PixelViewer.rc 使用
//
#define MH_BASE                         100
#define IDR_MENU1                       101
#define IDR_ACCELERATOR1                102
#define IDD_DIALOG1                     103
#define IDD_DIALOG2                     104
#define IDC_ICON1                       1001
#define IDC_EDIT1                       1002
#define IDC_SPIN1                       1003
#define IDC_EDIT2                       1004
#define IDC_SPIN2                       1005
#define IDS_STRING30000                 30000
#define IDS_STRING30001                 30001
#define IDS_STRING30002                 30002
#define IDM_EXIT                        40003
#define IDM_OPEN                        40004
#define IDM_ABOUT                       40006
#define IDM_LE                          40012
#define IDM_BE                          40013
#define IDM_CHANGESIZE                  40015
#define IDS_STRING40103                 40103
#define IDS_STRING40104                 40104
#define IDS_STRING40106                 40106
#define IDS_STRING40112                 40112
#define IDS_STRING40113                 40113
#define IDS_STRING40115                 40115

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        109
#define _APS_NEXT_COMMAND_VALUE         40018
#define _APS_NEXT_CONTROL_VALUE         1006
#define _APS_NEXT_SYMED_VALUE           102
#endif
#endif

9樓 巨大八爪鱼 2016-2-25 11:37
【資源文件】
// 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


內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。