¹Ù. Dangeun.cpp

±×·¯¸é ÀÌÁ¦ È£½ºÆ®ÀÎ ¸ÞÀÎ ¸ðµâÀÌ ¾î¶»°Ô ÀÛ¼ºµÇ¾î ÀÖ³ª º¸µµ·Ï ÇÏÀÚ. óÀ½ ½ÃÀÛ ÆÄÀÏÄ¡°í´Â ±×¸® ±æÁö ¾ÊÀ¸¸ç ¾ÆÁÖ ÀϹÝÀûÀÎ MDI ÇÁ·ÎÁ§Æ®ÀÇ ¿øÇü ±×´ë·ÎÀÌ´Ù.

 

#include "stdafx.h"

 

LRESULT CALLBACK DGWndProc(HWND,UINT,WPARAM,LPARAM);

LRESULT CALLBACK DGChildProc(HWND,UINT,WPARAM,LPARAM);

int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam);

void OnDestroy(HWND hWnd,WPARAM wParam,LPARAM lParam);

void OnTimer(HWND hWnd,WPARAM wParam,LPARAM lParam);

void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam);

 

BOOL CALLBACK AboutProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);

HWND New();

 

HINSTANCE g_hInst;

HWND g_hFrameWnd;

HWND g_hMDIClient;

int g_NewNo=0;

int g_ChildNum=0;

LPSTR lpszClass="Dangeun";

HMENU hMenu1,hMenu2;

 

struct SInfo

{

     CApiEdit Ae;

     TCHAR NowFile[MAX_PATH];

};

 

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

            ,LPSTR lpszCmdParam,int nCmdShow)

{

     HWND hWnd;

     MSG Message;

     WNDCLASSEX WndClassEx;

     g_hInst=hInstance;

    

     hMenu1=LoadMenu(g_hInst,MAKEINTRESOURCE(IDR_MENU1));

     hMenu2=LoadMenu(g_hInst,MAKEINTRESOURCE(IDR_MENU2));

 

     WndClassEx.cbSize=sizeof(WNDCLASSEX);

     WndClassEx.cbClsExtra=0;

     WndClassEx.cbWndExtra=0;

     WndClassEx.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);

     WndClassEx.hCursor=LoadCursor(NULL,IDC_ARROW);

     WndClassEx.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_DANGEUN));

     WndClassEx.hIconSm=(HICON)LoadImage(hInstance,MAKEINTRESOURCE(IDI_DANGEUN),

          IMAGE_ICON,GetSystemMetrics(SM_CXSMICON),

          GetSystemMetrics(SM_CXSMICON),LR_DEFAULTCOLOR);

     WndClassEx.hInstance=hInstance;

     WndClassEx.lpfnWndProc=(WNDPROC)DGWndProc;

     WndClassEx.lpszClassName=lpszClass;

     WndClassEx.lpszMenuName=MAKEINTRESOURCE(IDR_MENU2);

     WndClassEx.style=0;

     RegisterClassEx(&WndClassEx);

 

     WndClassEx.lpszClassName="DGChild";

     WndClassEx.lpfnWndProc=(WNDPROC)DGChildProc;

     WndClassEx.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_CHILD));

     WndClassEx.hIconSm=(HICON)LoadImage(hInstance,MAKEINTRESOURCE(IDI_CHILD),

          IMAGE_ICON,GetSystemMetrics(SM_CXSMICON),

          GetSystemMetrics(SM_CXSMICON),LR_DEFAULTCOLOR);

     WndClassEx.lpszMenuName=NULL;

     WndClassEx.cbWndExtra=sizeof(DWORD);

     RegisterClassEx(&WndClassEx);

 

     hWnd=CreateWindow(lpszClass,"´ç±Ù",WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN,

          CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,

          NULL,(HMENU)NULL,hInstance,NULL);

     HACCEL hAccel;

 

     hAccel=LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR1));

     while(GetMessage(&Message,0,0,0)) {

          if (!TranslateMDISysAccel(g_hMDIClient, &Message)) {

              if (!TranslateAccelerator(hWnd,hAccel,&Message)) {

                   TranslateMessage(&Message);

                   DispatchMessage(&Message);

              }

          }

     }

     return (int)Message.wParam;

}

 

LRESULT CALLBACK DGWndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage) {

          case WM_CREATE:return OnCreate(hWnd,wParam,lParam);

          case WM_DESTROY:OnDestroy(hWnd,wParam,lParam);return 0;

          case WM_COMMAND:OnCommand(hWnd,wParam,lParam);break;

          case WM_TIMER:OnTimer(hWnd,wParam,lParam);return 0;

     }

     return(DefFrameProc(hWnd,g_hMDIClient,iMessage,wParam,lParam));

}

 

int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     CLIENTCREATESTRUCT ccs;

     INITCOMMONCONTROLSEX icex;

 

     g_hFrameWnd=hWnd;

     icex.dwSize=sizeof(icex);

     icex.dwICC=ICC_WIN95_CLASSES;

     InitCommonControlsEx(&icex);

 

     ccs.hWindowMenu=GetSubMenu(GetMenu(hWnd),5);

     ccs.idFirstChild=IDM_WINDOWCHILD;

     g_hMDIClient=CreateWindowEx(WS_EX_CLIENTEDGE,"MDICLIENT", NULL,

          WS_CHILD | WS_CLIPCHILDREN |    WS_VISIBLE,

          0,0,0,0,hWnd,(HMENU)NULL, g_hInst, (LPSTR)&ccs);

     SetTimer(hWnd,100,1,NULL);

 

     return 0;

}

 

void OnDestroy(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     PostQuitMessage(0);

}

 

void OnTimer(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     switch (wParam) {

     case 100:

          KillTimer(hWnd,100);

          New();

          break;

     }

}

 

void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     switch(LOWORD(wParam)) {

     case IDM_FILE_NEW:

          New();

          break;

     case IDM_FILE_EXIT:

          SendMessage(hWnd,WM_CLOSE,0,0);

          break;

     case IDM_WIN_VERT:

          SendMessage(g_hMDIClient, WM_MDITILE,

              (WPARAM)MDITILE_VERTICAL, 0);

          break;

     case IDM_WIN_HORZ:

          SendMessage(g_hMDIClient, WM_MDITILE,

              (WPARAM)MDITILE_HORIZONTAL, 0);

          break;

     case IDM_WIN_CASCADE:

          SendMessage(g_hMDIClient, WM_MDICASCADE,

              (WPARAM)MDITILE_SKIPDISABLED, 0);

          break;

     case IDM_WIN_ARRANGE:

          SendMessage(g_hMDIClient, WM_MDIICONARRANGE, 0, 0);

          break;

     case IDM_HELP_ABOUT:

          DialogBox(g_hInst, MAKEINTRESOURCE(IDD_ABOUT), hWnd, AboutProc);

          break;

     }

}

 

LRESULT CALLBACK DGChildProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     SInfo *pSi;

 

     switch(iMessage) {

     case WM_CREATE:

          g_ChildNum++;

          if (g_ChildNum == 1) {

              SendMessage(g_hMDIClient,WM_MDISETMENU,(WPARAM)hMenu1,

                   (LPARAM)GetSubMenu(hMenu1,5));

              DrawMenuBar(g_hFrameWnd);

          }

          pSi=new SInfo;

          SetWindowLong(hWnd,0,(LONG)pSi);

          pSi->Ae.Create(0,0,0,0,WS_CHILD | WS_VISIBLE,1,hWnd);

          wsprintf(pSi->NowFile,"À̸§¾øÀ½ %d",g_NewNo);

          SetWindowText(hWnd,pSi->NowFile);

          return 0;

     case WM_SIZE:

          pSi=(SInfo *)GetWindowLong(hWnd,0);

          MoveWindow(pSi->Ae.hWnd,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);

          break;

     case WM_SETFOCUS:

          pSi=(SInfo *)GetWindowLong(hWnd,0);

          SetFocus(pSi->Ae.hWnd);

          return 0;

     case WM_DESTROY:

          pSi=(SInfo *)GetWindowLong(hWnd,0);

          delete pSi;

          g_ChildNum--;

          if (g_ChildNum==0) {

              SendMessage(g_hMDIClient,WM_MDISETMENU,(WPARAM)hMenu2,NULL);

              DrawMenuBar(g_hFrameWnd);

          }

          return 0;

     }

     return(DefMDIChildProc(hWnd,iMessage,wParam,lParam));

}

 

BOOL CALLBACK AboutProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage) {

     case WM_INITDIALOG:

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam))

          {

          case IDOK:

              EndDialog(hDlg,IDOK);

              return TRUE;

          case IDCANCEL:

              EndDialog(hDlg,IDCANCEL);

              return TRUE;

          }

          return FALSE;

     }

     return FALSE;

}

 

HWND New()

{

     MDICREATESTRUCT mcs;

     HWND hActive;

     BOOL bMax;

 

     hActive=(HWND)SendMessage(g_hMDIClient, WM_MDIGETACTIVE,0,(LPARAM)&bMax);

 

     g_NewNo++;

     mcs.szClass="DGChild";

     mcs.szTitle="";

     mcs.hOwner=g_hInst;

     mcs.x=mcs.y=CW_USEDEFAULT;

     mcs.cx=mcs.cy=CW_USEDEFAULT;

     mcs.style=MDIS_ALLCHILDSTYLES | WS_CLIPCHILDREN;

     if (hActive == NULL || bMax == TRUE) {

           mcs.style |= WS_MAXIMIZE;

     }

     return (HWND)SendMessage(g_hMDIClient, WM_MDICREATE, 0,

          (LPARAM)(LPMDICREATESTRUCT)&mcs);

}

 

PCH ±â´ÉÀ» »ç¿ëÇϱâ À§ÇØ stdafx.h Çϳª¸¸ ÀÎŬ·çµåÇÏ°í ÀÖ´Ù. ÀÌ ¼Ò½º´Â ´ÙÀ½ Àý¿¡¼­ ÀÚ¼¼ÇÏ°Ô ºÐ¼®ÇØ º¼ °ÍÀÌ´Ù. ÀÌÁ¦ ÄÄÆÄÀÏÇÑ ÈÄ ½ÇÇàÇغ¸ÀÚ.

óÀ½ ½ÇÇàµÇ¸é Â÷Àϵå Çϳª°¡ ÃÖ´ëÈ­µÇ¾î ³ªÅ¸³ª´Âµ¥ ÆÄÀÏ/»õ ÆÄÀÏ ¸í·ÉÀ¸·Î ¾ðÁ¦µçÁö »õ ¹®¼­Ã¢À» ¸¸µé ¼ö ÀÖ´Ù. â ¸Þ´º¿¡´Â ¿­¸° Â÷ÀϵåÀÇ ¸ñ·ÏÀÌ ³ªÅ¸³ª¸ç °è´Ü½Ä, ¼öÆò, ¼öÁ÷À¸·Î ÀÚ½ÄâÀ» Á¤·ÄÇÏ´Â ±â´Éµµ Á¦°øµÈ´Ù. ¸Þ´º¿¡´Â ¸¹Àº Ç׸ñµéÀÌ µî·ÏµÇ¾î ÀÖÁö¸¸ ¾ÆÁ÷ ±â´ÉÀ» ¸¸µéÁö ¾Ê¾Ò±â ¶§¹®¿¡ °ÅÀÇ ´ëºÎºÐÀº µ¿ÀÛÇÏÁö ¾Ê´Â »óÅÂÀÌ´Ù. ¾ÕÀ¸·Î ½Ç½ÀÀ» ÅëÇØ ÀÌ ±â´ÉµéÀ» Çϳª µÑ¾¿ ¸¸µé¾î ³ª°¥ °ÍÀÌ´Ù.