win32简单只读文件程序

摘要

win32  主窗口  客户区 子窗口

背景

时间20200525

本人win类型的制作只有matlab的课设经验。web的C#和javaEE的课设经验。此win Application仅第一次尝试。由各方文字版学习网站的,汇总学习。

电脑历史悠久,约莫2010年家里购买,有10年历史,曾经有过主板烧坏换过主板300元,电源适配器异常,后续经由他方处理,可正常开机,电脑许多软件matlab、visualstudio等丢失,VC6老古董依旧可以。因此采用VC6再本电脑进行win32窗口程序编写。

本程序为初级版本,如果要学习高级的,建议开源git等,比如notepad++:https://github.com/notepad-plus-plus/notepad-plus-plus

工具

电脑:win7个人电脑

IDE:VC6

第三方资源参考

http://www.winprog.org/tutorial/

www.yfvb.com/help/win32sdk

http://www.esk365.com/zxsc/prg/winapia/

实现功能

从目录打开文件(没有实现保存功能,因此为只读,即使在界面修改了内容也没有同步更新到源文件)

界面

首界面

帮助对话框

程序结构图

程序源码


/*change.cpp*/
#include<stdio.h>
#include<string.h>
#include <windows.h>
#include<winuser.h>
#pragma comment(lib,"user32.lib")
#include"resource.h"
#include <commctrl.h>
#include<windowsx.h> /*edit_text*/

#pragma comment(lib,"comctl32.lib")
//选择文件夹对话框
#include<Shlobj.h>
#pragma comment(lib,"Shell32.lib")
/*!客户区类名是固定的"mdiclient"*/
const char g_szClassName[] = "myWindowClass";/*应用系统主窗口注册的识别类名-用于创建时使用*/
const char g_szChildClassName[]="chileClass";/*多文档窗口注册的识别类名-创建客户区时使用*/
HWND     g_hMainWindow;
HWND     g_hMDIClient;
int      g_newfileno=0;

TBBUTTON    tbb[3];
TBADDBITMAP tbab;
LRESULT CALLBACK MDIChildWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

HWND CreateNewMDIChild(HWND hMDIClient)
{ 
    MDICREATESTRUCT mcs;
    HWND hChild;
    char tmp[MAX_PATH];
    sprintf(tmp,"newfile%d.txt",g_newfileno++);
	mcs.szTitle=tmp;
    mcs.szClass = g_szChildClassName;
    mcs.hOwner  = GetModuleHandle(NULL);
    mcs.x = mcs.cx = CW_USEDEFAULT;
    mcs.y = mcs.cy = CW_USEDEFAULT;
    mcs.style = MDIS_ALLCHILDSTYLES;

    hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs);
    if(!hChild)
    {
        MessageBox(hMDIClient, "sendmsg2MIDI client->proc creation failed.", "Oh Oh...",
            MB_ICONEXCLAMATION | MB_OK);
    }
    return hChild;
}

BOOL LoadTextFileToEdit(HWND hEdit, LPCTSTR pszFileName);

void DoFileOpen(HWND hwnd)
{

    OPENFILENAME ofn;
    char szFileName[MAX_PATH] = "";

    ZeroMemory(&ofn, sizeof(ofn));

    ofn.lStructSize = sizeof(ofn); // SEE NOTE BELOW
    ofn.hwndOwner = hwnd;
    ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0";
    ofn.lpstrFile = szFileName;
    ofn.nMaxFile = MAX_PATH;
    ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
    ofn.lpstrDefExt = "txt";

    if(GetOpenFileName(&ofn))
    { 
		if(hwnd!=NULL)
		{
               LoadTextFileToEdit(hwnd,ofn.lpstrFile);
		}
        // Do something usefull with the filename stored in szFileName 
    }
}

BOOL LoadTextFileToEdit(HWND hEdit, LPCTSTR pszFileName)
{
    HANDLE hFile;
    BOOL bSuccess = FALSE;

    hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
        OPEN_EXISTING, 0, NULL);
    if(hFile != INVALID_HANDLE_VALUE)
    {
        DWORD dwFileSize;

        dwFileSize = GetFileSize(hFile, NULL);
        if(dwFileSize != 0xFFFFFFFF)
        {
            LPSTR pszFileText;
              
            pszFileText = (LPSTR)GlobalAlloc(GPTR, dwFileSize + 1);
            if(pszFileText != NULL)
            {
                DWORD dwRead;

                if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
                {
                    pszFileText[dwFileSize] = 0; // Add null terminator
                    if(SetWindowText(hEdit, pszFileName))/*TITLE==等于Edit_SetText(hEdit,pszFileName)*/
					{ 
						//The SetWindowText function does not expand tab characters (ASCII code 0x09). Tab characters are displayed as vertical bar (|) characters.
					    if(0==SetDlgItemText(hEdit,IDC_CHILD_EDIT,pszFileText))
						{
							LPVOID lpMsgBuf;

                         FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /*默认语言*/(LPTSTR)&lpMsgBuf,0,NULL);
                             
			            MessageBox(hEdit,(LPTSTR)lpMsgBuf,"Error" , MB_ICONINFORMATION | MB_OK);
						LocalFree(lpMsgBuf );
                        }
						else{bSuccess = TRUE; /* It worked!*/
						}
					}
                }
                GlobalFree(pszFileText);
            }
        }
        CloseHandle(hFile);
    }
    return bSuccess;
}

BOOL SaveTextFileFromEdit(HWND hEdit, LPCTSTR pszFileName)
{
    HANDLE hFile;
    BOOL bSuccess = FALSE;

    hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, NULL,
        CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if(hFile != INVALID_HANDLE_VALUE)
    {
        DWORD dwTextLength;

        dwTextLength = GetWindowTextLength(hEdit);
        // No need to bother if there's no text.
        if(dwTextLength > 0)
        {
            LPSTR pszText;
            DWORD dwBufferSize = dwTextLength + 1;

            pszText = (LPSTR)GlobalAlloc(GPTR, dwBufferSize);
            if(pszText != NULL)
            {
                if(GetWindowText(hEdit, pszText, dwBufferSize))
                {
                    DWORD dwWritten;

                    if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL))
                        bSuccess = TRUE;
                }
                GlobalFree(pszText);
            }
        }
        CloseHandle(hFile);
    }
    return bSuccess;
}
/*注册客户区  {主窗口-[客户区<(子窗口1) (子窗口2) (...)>]}*/
BOOL SetUpMDIChildWindowClass(HINSTANCE hInstance)
{
    WNDCLASSEX wc;

    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = MDIChildWndProc;/*子窗口的消息回调*/
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);/*设置默认栏目图标*/
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);
    wc.lpszMenuName  = NULL;/*子窗口菜单栏无名*/
    wc.lpszClassName = g_szChildClassName;/*子窗口类名*/
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);/*设置默认任务栏图标*/

    if(!RegisterClassEx(&wc))
    {
        MessageBox(0, "Could Not Register Child Window", "Oh Oh...",
            MB_ICONEXCLAMATION | MB_OK);
        return FALSE;
    }
    else
        return TRUE;
}

/*子窗口的消息回调*/
LRESULT CALLBACK MDIChildWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CREATE:/*当创建一个这个子窗口的时候就会收到这个消息进而执行创建*/
       {
            HFONT hfDefault;
            HWND hEdit;

            // Create Edit Control

            hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", 
                WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 
                0, 0, 100, 100, hwnd, (HMENU)IDC_CHILD_EDIT, GetModuleHandle(NULL), NULL);
            if(hEdit == NULL)
                MessageBox(hwnd, "Could not create edit box.", "Error", MB_OK | MB_ICONERROR);

           hfDefault = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
            SendMessage(hEdit, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0));
        }
        break;
        case WM_MDICREATE:
			{ 
			
              CREATESTRUCT* pCreateStruct;
              MDICREATESTRUCT* pMDICreateStruct;

              pCreateStruct = (CREATESTRUCT*)lParam;
              pMDICreateStruct = (MDICREATESTRUCT*)pCreateStruct->lpCreateParams;
		      MessageBox(hwnd, "in WM_MDICREATE.", "SUCC", MB_OK );
			
			}
        break;
        case WM_MDIACTIVATE:
        {
            HMENU hMenu, hFileMenu;
            UINT EnableFlag;

            hMenu = GetMenu(g_hMainWindow);
            if(hwnd == (HWND)lParam)/*活动时禁止的菜单栏*/
            {      //being activated, enable the menus
                EnableFlag = MF_ENABLED;
            }
            else
            {                          //being de-activated, gray the menus
                EnableFlag = MF_GRAYED;
            }

            EnableMenuItem(hMenu, 1, MF_BYPOSITION | EnableFlag);
            EnableMenuItem(hMenu, 2, MF_BYPOSITION | EnableFlag);

            hFileMenu = GetSubMenu(hMenu, 0);
            EnableMenuItem(hFileMenu, ID_FILE_SAVEAS, MF_BYCOMMAND | EnableFlag);

            EnableMenuItem(hFileMenu, ID_FILE_CLOSE, MF_BYCOMMAND | EnableFlag);
            EnableMenuItem(hFileMenu, ID_FILE_CLOSEALL, MF_BYCOMMAND | EnableFlag);

            DrawMenuBar(g_hMainWindow);
        }
        break;
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case ID_FILE_OPEN:
                    DoFileOpen(hwnd);
                break;
                case ID_FILE_SAVEAS:
                    //DoFileSave(hwnd);
                break;
                case ID_EDIT_CUT:
                    SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, WM_CUT, 0, 0);
                break;
                case ID_EDIT_COPY:
                    SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, WM_COPY, 0, 0);
                break;
                case ID_EDIT_PASTE:
                    SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, WM_PASTE, 0, 0);
                break;
            }
        break;
        case WM_SIZE:
        {/*调整主窗口大小-即右上角 缩放 并调整内部子窗口*/
            HWND hEdit;
            RECT rcClient;

            // Calculate remaining height and size edit

            GetClientRect(hwnd, &rcClient);

            hEdit = GetDlgItem(hwnd, IDC_CHILD_EDIT);
            SetWindowPos(hEdit, NULL, 0, 0, rcClient.right, rcClient.bottom, SWP_NOZORDER);
        }
        return DefMDIChildProc(hwnd, msg, wParam, lParam);/*多文档窗口的默认回调不一样*/
        default:
            return DefMDIChildProc(hwnd, msg, wParam, lParam);
    
    }
    return 0;
}
//=====



BOOL CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
    switch(Message)
    {
        case WM_INITDIALOG:

        return TRUE;
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case IDOK:
                    EndDialog(hwnd, IDOK);
                break;
                case IDCANCEL:
                    EndDialog(hwnd, IDCANCEL);
                break;
            }
        break;
        default:
            return FALSE;
    }
    return TRUE;
}

// Step 4: the Window Procedure
/*应用系统主窗口的函数*/
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
		 case WM_CREATE:/*当主窗口创建时好后,将有可以收到该消息*/
    {
        HMENU hMenu, hSubMenu;
        HICON hIcon, hIconSm;

        hMenu = CreateMenu();/*创建一级菜句柄*/

        hSubMenu = CreatePopupMenu();/*二级菜单句柄*/
        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&^-^");   /*由上到下二级甲*/
        AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, "E&xit"); /*由上到下二级乙*/
        AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&File");/*将二级菜单挂到一级菜单左边1*/
		
        hSubMenu = CreatePopupMenu();/*二级菜单句柄*/
        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Go");/*由上到下二级甲*/
        AppendMenu(hSubMenu, MF_STRING, ID_HELP_ABOUT, "&Help");/*由上到下二级甲*/
        AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&Ask");/*将二级菜单挂到一级菜单左边2*/
     

        SetMenu(hwnd, hMenu);/*菜单挂在到窗口句柄*/


        hIcon = (HICON)LoadImage(NULL, "menu_one.ico", IMAGE_ICON, 36, 36, LR_LOADFROMFILE);
        if(hIcon)
            SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
        else
            MessageBox(hwnd, "Could not load large icon!", "Error", MB_OK | MB_ICONERROR);

        hIconSm =(HICON) LoadImage(NULL, "menu_one.ico", IMAGE_ICON, 16, 16, LR_LOADFROMFILE);
        if(hIconSm)
            SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)hIconSm);
        else
            MessageBox(hwnd, "Could not load small icon!", "Error", MB_OK | MB_ICONERROR);
        //工具栏+按钮
        HWND  hTool;
        hTool = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0,
        hwnd, (HMENU)IDC_CHANGE_TOOL, GetModuleHandle(NULL), NULL);

	    SendMessage(hTool, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);

		tbab.hInst = HINST_COMMCTRL;
        tbab.nID = IDB_STD_SMALL_COLOR;
        SendMessage(hTool, TB_ADDBITMAP, 0, (LPARAM)&tbab);/*增加工具栏位图*/
	    ZeroMemory(tbb, sizeof(tbb));
        tbb[0].iBitmap = STD_FILENEW;/*标准新建文件位图*/
        tbb[0].fsState = TBSTATE_ENABLED;
        tbb[0].fsStyle = TBSTYLE_BUTTON;
        tbb[0].idCommand = ID_FILE_NEW;/*工具一,并自定义设置程序中该类型编码识别值*/

        tbb[1].iBitmap = STD_FILEOPEN;/*标准打开文件位图*/
        tbb[1].fsState = TBSTATE_ENABLED;
        tbb[1].fsStyle = TBSTYLE_BUTTON;
        tbb[1].idCommand = ID_FILE_OPEN;/*工具一,并自定义设置程序中该类型编码识别值*/

        tbb[2].iBitmap = STD_FILESAVE;/*标准保存文件位图*/
        tbb[2].fsState = TBSTATE_ENABLED;
        tbb[2].fsStyle = TBSTYLE_BUTTON;
        tbb[2].idCommand = ID_FILE_SAVEAS;/*工具一,并自定义设置程序中该类型编码识别值*/
	
        SendMessage(hTool, TB_ADDBUTTONS, sizeof(tbb)/sizeof(TBBUTTON), (LPARAM)&tbb);	/*绘图通知*/
  //--底部状态栏
	  HWND hStatus;
	  hStatus = CreateWindowEx(0, STATUSCLASSNAME, NULL,
        WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 0, 0, 0, 0,
        hwnd, (HMENU)IDC_MAIN_STATUS, GetModuleHandle(NULL), NULL);
     int statwidths[] = {100, -1};

    SendMessage(hStatus, SB_SETPARTS, sizeof(statwidths)/sizeof(int), (LPARAM)statwidths);
    SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"(-o-)");


		//--创建客户区
		 CLIENTCREATESTRUCT ccs;

        ccs.hWindowMenu  = GetSubMenu(GetMenu(hwnd), 2);
        ccs.idFirstChild = ID_MDI_FIRSTCHILD;

        g_hMDIClient = CreateWindowEx(WS_EX_CLIENTEDGE, "mdiclient", NULL,
        WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
        hwnd, (HMENU)IDC_MAIN_MDI, GetModuleHandle(NULL), (LPVOID)&ccs);

		if(g_hMDIClient == NULL)
            MessageBox(hwnd, "Could not create client area.", "Error", MB_OK | MB_ICONERROR);
        ShowWindow(g_hMDIClient,SW_SHOW);
        
	}
    break;
	 case WM_SIZE:/*动态创建之调整大小*/
            {
             HWND hTool;
             RECT rcTool;
             int iToolHeight;

             HWND hStatus;
             RECT rcStatus;
             int iStatusHeight;

             HWND hEdit;
             int iEditHeight;
             RECT rcClient;

    // Size toolbar and get height

             hTool = GetDlgItem(hwnd, IDC_CHANGE_TOOL);
             SendMessage(hTool, TB_AUTOSIZE, 0, 0);

             GetWindowRect(hTool, &rcTool);
             iToolHeight = rcTool.bottom - rcTool.top;

    // Size status bar and get height

             hStatus = GetDlgItem(hwnd, IDC_MAIN_STATUS);
             SendMessage(hStatus, WM_SIZE, 0, 0);

            GetWindowRect(hStatus, &rcStatus);
            iStatusHeight = rcStatus.bottom - rcStatus.top;

    // Calculate remaining height and size edit

           GetClientRect(hwnd, &rcClient);

           iEditHeight = rcClient.bottom - iToolHeight - iStatusHeight;

          hEdit = GetDlgItem(hwnd, IDC_MAIN_MDI);
          SetWindowPos(hEdit, NULL, 0, iToolHeight, rcClient.right, iEditHeight, SWP_NOZORDER);


			}
	  break;
    case WM_COMMAND:
            switch(LOWORD(wParam))/*窗口参数低字 用于本程序自定义的编码识别值*/
			{
				case ID_FILE_NEW:/*工具栏新建文件*/
                   CreateNewMDIChild(g_hMDIClient);
                   break;
                case ID_FILE_OPEN:/*工具栏打开文件*/
					{
                       HWND hChild=CreateNewMDIChild(g_hMDIClient);
                      if(hChild)
					  {
                         DoFileOpen(hChild); 
					  }
					}
                   break;
              case ID_FILE_CLOSE:/*工具栏关闭文件*/
				  {
                    HWND hChild = (HWND)SendMessage(g_hMDIClient, WM_MDIGETACTIVE,0,0);
                   if(hChild)
				   {
                         SendMessage(hChild, WM_CLOSE, 0, 0);
				   }
				  }
              break;
              case ID_WINDOW_TILE:
               SendMessage(g_hMDIClient, WM_MDITILE, 0, 0);
             break;
            case ID_WINDOW_CASCADE:
                SendMessage(g_hMDIClient, WM_MDICASCADE, 0, 0);
              break;
             case ID_FILE_EXIT:
                DestroyWindow(hwnd);
					
             break;
	case ID_HELP_ABOUT:
		  DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc);
		  break;
    case ID_STUFF_GO:
          break;
	default:
				{
                    if(LOWORD(wParam) >= ID_MDI_FIRSTCHILD)
					{
                       DefFrameProc(hwnd, g_hMDIClient, msg, wParam, lParam);
					}
                   else 
				   {
                       HWND hChild = (HWND)SendMessage(g_hMDIClient, WM_MDIGETACTIVE,0,0);
                       if(hChild)
					   {
                        SendMessage(hChild, WM_COMMAND, wParam, lParam);
					   }
				   }
				}
            }
        break;
    case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
    case WM_DESTROY:
            PostQuitMessage(0);
        break;
        default:
            return DefFrameProc(hwnd, g_hMDIClient, msg, wParam, lParam);
			//DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}



int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 WNDCLASSEX wc;
   // HWND hwnd;
    MSG Msg;

    //Step 1: Registering the Window Class
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    //wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
     wc.lpszMenuName  = MAKEINTRESOURCE(IDR_MYMENU);
	 wc.hIcon  = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON));
    wc.hIconSm  = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 16, 16, 0);


	wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    //wc.lpszMenuName  = NULL;
    wc.lpszClassName = g_szClassName;
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }
 

   SetUpMDIChildWindowClass(hInstance);

    // Step 2: Creating the Window
    //hwnd 
		g_hMainWindow= CreateWindowEx(
        WS_EX_CLIENTEDGE,
        g_szClassName,/*主要窗口名字*/
        "欢迎来到测试世界",/*主窗口的标题*/
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
        NULL, NULL, hInstance, NULL);

    if(/*hwnd*/ g_hMainWindow== NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(g_hMainWindow/*hwnd*/, nCmdShow);
    UpdateWindow(g_hMainWindow/*hwnd*/);
 
	// Main message loop:
	while(GetMessage(&Msg, NULL, 0, 0))
    {
        if (!TranslateMDISysAccel(g_hMDIClient, &Msg))
			/*多文档窗口的消息翻译不一样*/
        {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }
    }

	return Msg.wParam;
}

 

/*resource.h*/
#define IDI_MYICON  101
#define IDR_MYMENU  102

#define IDD_ABOUT   103
#define IDC_MAIN_STATUS 104
#define IDC_CHANGE_TOOL 105
#define IDC_MAIN_MDI    110
#define IDC_CHILD_EDIT  120


#define IDC_STATIC   -1



#define ID_FILE_EXIT   9001
#define ID_FILE_NEW    9002
#define ID_FILE_OPEN   9003
#define ID_FILE_SAVEAS 9004
#define ID_FILE_CLOSE  9005
#define ID_FILE_CLOSEALL 9006

#define ID_STUFF_GO   9100
#define ID_HELP_ABOUT 9101

#define ID_EDIT_CUT    9200
#define ID_EDIT_COPY   9201
#define ID_EDIT_PASTE  9203

#define ID_WINDOW_TILE    9300
#define  ID_WINDOW_CASCADE 93001


#define ID_MDI_FIRSTCHILD 50000

下面这个是change.rc文件


#define APSTUDIO_READONLY_SYMBOLS
/
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "resource.h"

/
#undef APSTUDIO_READONLY_SYMBOLS
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "resource.h"

/
#undef APSTUDIO_READONLY_SYMBOLS

/
// Chinese (中国) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
//LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32

/
//
// Icon
//

// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_MYICON              ICON    DISCARDABLE     "menu_one.ico"

/
//
// Menu
//

IDR_MYMENU MENU DISCARDABLE 
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "E&xit",                       ID_FILE_EXIT
    END
    POPUP "&ask"
    BEGIN
        MENUITEM "&Help",                       ID_HELP_ABOUT
        MENUITEM "&Go",                         ID_STUFF_GO
        MENUITEM "G&o somewhere else",          0, GRAYED
    END
END


/
//
// Dialog
//

IDD_ABOUT DIALOG DISCARDABLE  0, 0, 239, 66
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "小朋友有很多问号Box"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON   "&朕已阅",IDOK,174,18,50,14
    PUSHBUTTON      "&退朝",IDCANCEL,174,35,50,14
    GROUPBOX        "<诏书>",IDC_STATIC,7,7,225,52
    CTEXT           "\r\n国库已空\r\n人马遣散\r\n",IDC_STATIC,16,18,144,33
END

IDD_DIALOG1 DIALOG DISCARDABLE  0, 0, 187, 96
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "对话"
FONT 10, "System"
BEGIN
    DEFPUSHBUTTON   "确定",IDOK,130,7,50,14
    PUSHBUTTON      "取消",IDCANCEL,130,24,50,14
END


#ifdef APSTUDIO_INVOKED
/
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE 
BEGIN
    "resrc1.h\0"
END

2 TEXTINCLUDE DISCARDABLE 
BEGIN
    "#include ""resource.h""\r\n"
    "\0"
END

3 TEXTINCLUDE DISCARDABLE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE 
BEGIN
    IDD_DIALOG1, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 180
        TOPMARGIN, 7
        BOTTOMMARGIN, 89
    END
END
#endif    // APSTUDIO_INVOKED

#endif    // Chinese (中国) resources
/



#ifndef APSTUDIO_INVOKED
/
//
// Generated from the TEXTINCLUDE 3 resource.
//


/
#endif    // not APSTUDIO_INVOKED

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值