DDX 대화상자
DDX dialog 샘플다운로드
DDX dialog 샘플다운로드
소스 다운로드
소스 다운로드
stdafx.h stdafx.cpp CObject.h CObject.cpp CView.h 메시지만 집중 CView.cpp MFC가 생성한 코드에 CView.h CView.cpp 만 있다고 생각해봐라. 간결함 그 자체이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
#include <Windows.h> #define DECLARE_MESSAGE_MAP() static MessageMap messageMap[]; #define BEGIN_MESSAGE_MAP(class_name) MessageMap class_name::messageMap[]={ #define END_MESSAGE_MAP() {0,NULL}}; LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam); //Class CObject class CObject{ protected: static char szAppName[]; HWND hwnd; MSG msg; WNDCLASSEX wndclass; public: void InitInstance(HINSTANCE hInstance, PSTR szCmdLine, int iCmdShow); void Run();//Message WPARAM ExitInstance(); //exit //message handler virtual void OnCreate() = 0; virtual void OnDraw() = 0; virtual void OnDestroy() = 0; }; void CObject::InitInstance(HINSTANCE hInstance, PSTR szCmdLine, int iCmdShow) { wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra =0; wndclass.cbWndExtra= 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION); RegisterClassEx(&wndclass); hwnd = CreateWindow(szAppName, "Hello Program", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); } void CObject::Run(){ while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg); } } WPARAM CObject::ExitInstance(){ return msg.wParam; } char CObject::szAppName[]="HelloWin"; //CObject* pCObject; //class CView class CView; typedef void (CView::*CViewFunPointer)();//함수포인터 typedef struct tagMessgeMap{ //구조체 UINT iMsg; CViewFunPointer fp; //함수포인터 주소 }MessageMap; static CViewFunPointer fpCViewGlobal; //정적 주소 class CView:public CObject{ public: //static MessageMap messageMap[]; DECLARE_MESSAGE_MAP() //override all message handler void OnCreate(); void OnDraw(); void OnDestroy(); }; BEGIN_MESSAGE_MAP(CView) //MessageMap CView::messageMap[]={ {WM_CREATE,&CView::OnCreate}, {WM_PAINT,&CView::OnDraw}, {WM_DESTROY,&CView::OnDestroy}, //{0,NULL} //}; END_MESSAGE_MAP() void CView::OnCreate(){ } void CView::OnDraw() { HDC hdc; PAINTSTRUCT ps; RECT rect; hdc=BeginPaint(hwnd,&ps); GetClientRect(hwnd,&rect); DrawText(hdc,"Hello Window",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hwnd,&ps); } void CView::OnDestroy() { PostQuitMessage(0); } CView app; LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam) { int i=0; while(CView::messageMap[i].iMsg!=0){ if(iMsg==CView::messageMap[i].iMsg){ fpCViewGlobal=CView::messageMap[i].fp; (app.*fpCViewGlobal)(); return 0; } ++i; } return DefWindowProc(hwnd,iMsg,wParam,lParam); } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow) { //pCObject = &app; // CView app; app.InitInstance(hInstance,szCmdLine,iCmdShow); app.Run(); return app.ExitInstance(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
#include <Windows.h> LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam); //Class CObject class CObject{ protected: static char szAppName[]; HWND hwnd; MSG msg; WNDCLASSEX wndclass; public: void InitInstance(HINSTANCE hInstance, PSTR szCmdLine, int iCmdShow); void Run();//Message WPARAM ExitInstance(); //exit //message handler virtual void OnCreate() = 0; virtual void OnDraw() = 0; virtual void OnDestroy() = 0; }; void CObject::InitInstance(HINSTANCE hInstance, PSTR szCmdLine, int iCmdShow) { wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra =0; wndclass.cbWndExtra= 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION); RegisterClassEx(&wndclass); hwnd = CreateWindow(szAppName, "Hello Program", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); } void CObject::Run(){ while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg); } } WPARAM CObject::ExitInstance(){ return msg.wParam; } char CObject::szAppName[]="HelloWin"; CObject* pCObject; //class CView class CView; typedef void (CView::*CViewFunPointer)();//함수포인터 typedef struct tagMessgeMap{ //구조체 UINT iMsg; CViewFunPointer fp; //함수포인터 주소 }MessageMap; static CViewFunPointer fpCViewGlobal; //정적 주소 class CView:public CObject{ public: static MessageMap messageMap[]; //override all message handler void OnCreate(); void OnDraw(); void OnDestroy(); }; //{{BEGIN_MESSAGE_MAP MessageMap CView::messageMap[]={ {WM_CREATE,&CView::OnCreate}, {WM_PAINT,&CView::OnDraw}, {WM_DESTROY,&CView::OnDestroy}, {0,NULL} }; //}}END_MESSAGE_MAP void CView::OnCreate(){ } void CView::OnDraw() { HDC hdc; PAINTSTRUCT ps; RECT rect; hdc=BeginPaint(hwnd,&ps); GetClientRect(hwnd,&rect); DrawText(hdc,"Hello Window",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hwnd,&ps); } void CView::OnDestroy() { PostQuitMessage(0); } CView app; LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam) { int i=0; while(CView::messageMap[i].iMsg!=0){ if(iMsg==CView::messageMap[i].iMsg){ fpCViewGlobal=CView::messageMap[i].fp; (app.*fpCViewGlobal)(); return 0; } ++i; } return DefWindowProc(hwnd,iMsg,wParam,lParam); } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow) { pCObject = &app; // CView app; pCObject->InitInstance(hInstance,szCmdLine,iCmdShow); pCObject->Run(); return pCObject->ExitInstance(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
#include <Windows.h> LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam); //Class CObject class CObject{ protected: static char szAppName[]; HWND hwnd; MSG msg; WNDCLASSEX wndclass; public: void InitInstance(HINSTANCE hInstance, PSTR szCmdLine, int iCmdShow); void Run();//Message WPARAM ExitInstance(); //exit //message handler virtual void OnCreate() = 0; virtual void OnDraw() = 0; virtual void OnDestroy() = 0; }; void CObject::InitInstance(HINSTANCE hInstance, PSTR szCmdLine, int iCmdShow) { wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra =0; wndclass.cbWndExtra= 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION); RegisterClassEx(&wndclass); hwnd = CreateWindow(szAppName, "Hello Program", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); } void CObject::Run(){ while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg); } } WPARAM CObject::ExitInstance(){ return msg.wParam; } char CObject::szAppName[]="HelloWin"; CObject* pCObject; //class CView class CView:public CObject{ //override all message handler void OnCreate(); void OnDraw(); void OnDestroy(); }; void CView::OnCreate(){ } void CView::OnDraw() { HDC hdc; PAINTSTRUCT ps; RECT rect; hdc=BeginPaint(hwnd,&ps); GetClientRect(hwnd,&rect); DrawText(hdc,"Hello Window",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hwnd,&ps); } void CView::OnDestroy() { PostQuitMessage(0); } CView app; LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam) { switch(iMsg){ case WM_CREATE: pCObject->OnCreate(); //CObject* pCObject; return 0; case WM_PAINT: pCObject->OnDraw(); return 0; case WM_DESTROY: pCObject->OnDestroy(); return 0; } return DefWindowProc(hwnd,iMsg,wParam,lParam); } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow) { pCObject = &app; // CView app; pCObject->InitInstance(hInstance,szCmdLine,iCmdShow); pCObject->Run(); return pCObject->ExitInstance(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
#include <Windows.h> LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; switch(iMsg){ case WM_CREATE: return 0; case WM_PAINT: hdc=BeginPaint(hwnd,&ps); GetClientRect(hwnd,&rect); DrawText(hdc,"Hello Window",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hwnd,&ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,iMsg,wParam,lParam); } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow) { static char szAppName[]="Hello Win"; HWND hwnd; MSG msg; WNDCLASSEX wndclass; wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra =0; wndclass.cbWndExtra= 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION); RegisterClassEx(&wndclass); hwnd = CreateWindow(szAppName, "Hello Program", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); ShowWindow(hwnd,iCmdShow); //UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)){ //TranslateMessage(&msg); static int i=0; char buffer[80]; wsprintf(buffer,"i\n",++i); OutputDebugString(buffer); DispatchMessage(&msg); } while(1) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if(msg.message == WM_QUIT) break; DispatchMessage(&msg); } static int i =0; char buffer[8]; wsprintf(buffer,"i\n",++i); OutputDebugString(buffer); } return msg.wParam; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
#include <Windows.h> LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam); class CApp{ static char szAppName[]; HWND hwnd; MSG msg; WNDCLASSEX wndclass; public: void InitInstance(HINSTANCE hInstance, PSTR szCmdLine, int iCmdShow); void Run();//Message WPARAM ExitInstance(); //exit //message handler void OnCreate(); void OnDraw(); void OnDestroy(); }; void CApp::InitInstance(HINSTANCE hInstance, PSTR szCmdLine, int iCmdShow) { wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra =0; wndclass.cbWndExtra= 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION); RegisterClassEx(&wndclass); hwnd = CreateWindow(szAppName, "Hello Program", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); } void CApp::Run(){ while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg); } } WPARAM CApp::ExitInstance(){ return msg.wParam; } char CApp::szAppName[]="HelloWin"; void CApp::OnCreate(){ } void CApp::OnDraw(){ HDC hdc; PAINTSTRUCT ps; RECT rect; hdc=BeginPaint(hwnd,&ps); GetClientRect(hwnd,&rect); DrawText(hdc,"Hello Window",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hwnd,&ps); } void CApp::OnDestroy(){ PostQuitMessage(0); } CApp app; LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam) { switch(iMsg){ case WM_CREATE: app.OnCreate(); return 0; case WM_PAINT: app.OnDraw(); return 0; case WM_DESTROY: app.OnDestroy(); return 0; } return DefWindowProc(hwnd,iMsg,wParam,lParam); } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow) { app.InitInstance(hInstance,szCmdLine,iCmdShow); app.Run(); return app.ExitInstance(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#include <iostream> using std::cout; using std::cin; using std::endl; template<class T> class TArray { private : T* data; int size; public: TArray(int n); void Gather(); void Show(); }; template<class T> TArray<T>::TArray(int n) { data = new T[n]; size =n; } template<class T> void TArray<T>::Gather() { int i; for(i=0;i<size;i++) { cout<<"Enter a number:"; cin>>data[i]; } } template<class T> void TArray<T>::Show() { int i; for(i=0;i<size;i++) cout<<data[i]<<endl; } void main() { TArray<int> x(5); x.Gather(); x.Show(); } |