Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 1: Hello, MFC Windows Programming Model Department of Digital Contents Sang Il Park.

Similar presentations


Presentation on theme: "Chapter 1: Hello, MFC Windows Programming Model Department of Digital Contents Sang Il Park."— Presentation transcript:

1 Chapter 1: Hello, MFC Windows Programming Model Department of Digital Contents Sang Il Park

2 Programming Models 1.Procedural Programming model 2.Event-Driven Programming model (windows programming model)

3 Procedural Programming Model int main() { funcA(); funcB(); return 0; } int main() { funcA(); funcB(); return 0; } { …… return; } { …… return; } { funcC(); return; } { funcC(); return; } { ….. return; } { ….. return; }

4 Procedural Programming Model –Starts with “Main()” function –Ends when main returns –Calls functions sequentially –Basically main function calls other functions (it determines what is called and when)

5 Event-driven Programming Model EVENT!!! Help me! Message Event Handling

6 Event-driven Programming Model int WinMain() { return 0; } int WinMain() { return 0; } Message Loop Message 1Message 2Message 3 Window Procedure

7 –Begins with “WinMain()” function –Starts a massage loop in the WinMain for waiting messages –Gets messages from operating system, a user or the program. –Messages are processed by windows procedure –Ends when Quit message is given Event-driven Programming Model

8 Event-Driven Programming Model with more details:

9 Messages, messages and more Messages MessageSent When WM_CHARA character is input from the keyboard. WM_COMMANDThe user selects an item from a menu, or a control sends a notification to its parent. WM_CREATEA window is created. WM_DESTROYA window is destroyed. WM_LBUTTONDOWNThe left mouse button is pressed. WM_LBUTTONUPThe left mouse button is released. WM_MOUSEMOVEThe mouse pointer is moved. WM_PAINTA window needs repainting. WM_QUITThe application is about to terminate. WM_SIZEA window is resized. Common Windows Messages

10 A Simple Event-driven Coding Practice

11 Event-driven example Using C++, Take an integer number as an input from the user and do as follows: –If the input is ‘1’, then print “Sejong University”, –If the input is ‘2’, then print “Digital Contents”, –If the input is ‘3’, then print “Bye~” and quit, –Take a new input and repeat.

12 Code: #include using namespace std; int main() { int i; while(true) { cout<<"Input: "; cin>>i; switch(i) { case 1: cout<<"Sejong University"<<endl; break; case 2: cout<<"Digital Contents"<<endl; break; case 3: cout<<"Bye!"<<endl; return 0; break; default: break; } return 0; } #include using namespace std; int main() { int i; while(true) { cout<<"Input: "; cin>>i; switch(i) { case 1: cout<<"Sejong University"<<endl; break; case 2: cout<<"Digital Contents"<<endl; break; case 3: cout<<"Bye!"<<endl; return 0; break; default: break; } return 0; }

13 Event-driven example Using C++, Takes an integer number as an input from the user –If the input is ‘1’, then print “Sejong University”, –If the input is ‘2’, then print “Digital Contents”, –If the input is ‘3’, then print “Bye~” and quit, –Take a new input and repeat. Windows Procedure Message (Event)Message (Event) Handler Message Loop

14 Code: #include using namespace std; int main() { int i; while(true) { cout<<"Input: "; cin>>i; switch(i) { case 1: cout<<"Sejong University"<<endl; break; case 2: cout<<"Digital Contents"<<endl; break; case 3: cout<<"Bye!"<<endl; return 0; break; default: break; } return 0; } #include using namespace std; int main() { int i; while(true) { cout<<"Input: "; cin>>i; switch(i) { case 1: cout<<"Sejong University"<<endl; break; case 2: cout<<"Digital Contents"<<endl; break; case 3: cout<<"Bye!"<<endl; return 0; break; default: break; } return 0; } Message Message Handler Message Loop

15 A fancier code: int main() { int i; while(true) { cout<<"Input: "; cin>>i; procedure(i); } return 0; } int main() { int i; while(true) { cout<<"Input: "; cin>>i; procedure(i); } return 0; } void procedure(int msg) { switch(msg) { case 1: cout<<"Sejong University"<<endl; break; case 2: cout<<"Digital Contents"<<endl; break; case 3: cout<<"Bye!"<<endl; exit(0); break; default: break; } void procedure(int msg) { switch(msg) { case 1: cout<<"Sejong University"<<endl; break; case 2: cout<<"Digital Contents"<<endl; break; case 3: cout<<"Bye!"<<endl; exit(0); break; default: break; }

16 API Windows Programming (or SDK-Style)

17 Win32 ? (= Windows API) Programming is not making everything from nothing Programming is rather assembling existing functions and data types Extended Functions and data types are distributed as a form of library –Ex.) 2D drawing functions (OpenCV library), 3D drawing functions (OpenGL library), Playing music functions (DirectShow library) and so on

18 Win32 ? ( = Windows API) API (Application Programming Interface) –A library contains functions for controlling and using operating system. –Mostly C functions. Win32 –Name of the Windows API –Collection of C functions for making windows programming (library) –Ex.) Functions for “creating new windows”, “adding a button”, “adding a new menu” and so on.

19 Begin Win32 Project File  New  Project  Win32 Project

20 Begin Win32 Project Application Setting

21 Begin Win32 Project Set “Character Set ” as “Not Set ”

22 Adding “Main.cpp” #include LONG WINAPI WndProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { WNDCLASS wc; HWND hwnd; MSG msg; wc.style = 0; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon (NULL, IDI_WINLOGO); wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = NULL; wc.lpszClassName = "MyWndClass"; RegisterClass (&wc); hwnd = CreateWindow ( "MyWndClass", // WNDCLASS name "SDK Application", // Window title WS_OVERLAPPEDWINDOW, // Window style CW_USEDEFAULT, // Horizontal position CW_USEDEFAULT, // Vertical position CW_USEDEFAULT, // Initial width CW_USEDEFAULT, // Initial height HWND_DESKTOP, // Handle of parent window NULL, // Menu handle hInstance, // Application's instance handle NULL // Window-creation data ); ShowWindow (hwnd, nCmdShow); UpdateWindow (hwnd); while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } #include LONG WINAPI WndProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { WNDCLASS wc; HWND hwnd; MSG msg; wc.style = 0; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon (NULL, IDI_WINLOGO); wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = NULL; wc.lpszClassName = "MyWndClass"; RegisterClass (&wc); hwnd = CreateWindow ( "MyWndClass", // WNDCLASS name "SDK Application", // Window title WS_OVERLAPPEDWINDOW, // Window style CW_USEDEFAULT, // Horizontal position CW_USEDEFAULT, // Vertical position CW_USEDEFAULT, // Initial width CW_USEDEFAULT, // Initial height HWND_DESKTOP, // Handle of parent window NULL, // Menu handle hInstance, // Application's instance handle NULL // Window-creation data ); ShowWindow (hwnd, nCmdShow); UpdateWindow (hwnd); while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint (hwnd, &ps); Ellipse (hdc, 0, 0, 200, 100); EndPaint (hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage (0); return 0; } return DefWindowProc (hwnd, message, wParam, lParam); } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint (hwnd, &ps); Ellipse (hdc, 0, 0, 200, 100); EndPaint (hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage (0); return 0; } return DefWindowProc (hwnd, message, wParam, lParam); }

23 Compile and Run it!

24 Code looks complex, but… #include LONG WINAPI WndProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { WNDCLASS wc; HWND hwnd; MSG msg; wc.style = 0; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon (NULL, IDI_WINLOGO); wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = NULL; wc.lpszClassName = "MyWndClass"; RegisterClass (&wc); hwnd = CreateWindow ( "MyWndClass", // WNDCLASS name "SDK Application", // Window title WS_OVERLAPPEDWINDOW, // Window style CW_USEDEFAULT, // Horizontal position CW_USEDEFAULT, // Vertical position CW_USEDEFAULT, // Initial width CW_USEDEFAULT, // Initial height HWND_DESKTOP, // Handle of parent window NULL, // Menu handle hInstance, // Application's instance handle NULL // Window-creation data ); ShowWindow (hwnd, nCmdShow); UpdateWindow (hwnd); while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } #include LONG WINAPI WndProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { WNDCLASS wc; HWND hwnd; MSG msg; wc.style = 0; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon (NULL, IDI_WINLOGO); wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = NULL; wc.lpszClassName = "MyWndClass"; RegisterClass (&wc); hwnd = CreateWindow ( "MyWndClass", // WNDCLASS name "SDK Application", // Window title WS_OVERLAPPEDWINDOW, // Window style CW_USEDEFAULT, // Horizontal position CW_USEDEFAULT, // Vertical position CW_USEDEFAULT, // Initial width CW_USEDEFAULT, // Initial height HWND_DESKTOP, // Handle of parent window NULL, // Menu handle hInstance, // Application's instance handle NULL // Window-creation data ); ShowWindow (hwnd, nCmdShow); UpdateWindow (hwnd); while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint (hwnd, &ps); Ellipse (hdc, 0, 0, 200, 100); EndPaint (hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage (0); return 0; } return DefWindowProc (hwnd, message, wParam, lParam); } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint (hwnd, &ps); Ellipse (hdc, 0, 0, 200, 100); EndPaint (hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage (0); return 0; } return DefWindowProc (hwnd, message, wParam, lParam); } SAME STRUCTURE!

25 Little change in WinProc In the switch statements of WinProc: case WM_PAINT: hdc = BeginPaint(hWnd, &ps); Ellipse (hdc, 0, 0, 200, 100); RECT rect; GetClientRect(hwnd, &rect); DrawText(hdc, "hello, Windows", -1, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hWnd, &ps); return 0; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); Ellipse (hdc, 0, 0, 200, 100); RECT rect; GetClientRect(hwnd, &rect); DrawText(hdc, "hello, Windows", -1, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hWnd, &ps); return 0; Add this!

26 A Little more change in WinProc In the switch statement, add more event handler: case WM_LBUTTONDOWN: MessageBox(hwnd, "haha", "Test!"), MB_OK); break; case WM_LBUTTONDOWN: MessageBox(hwnd, "haha", "Test!"), MB_OK); break; Add this

27 Result:

28 Summary: WinMain(…)  main function { WNDCLASS …  Define a new program CreateWindows (…)  Create a window while( GetMessage (…))  Message Loop { DispatchMessage(…)  Message Handler } (Windows Procedure) } Win32 Program Structure

29 Then, What is MFC ? To be continued…

30 Back in your home… Read and try: Chapter1 – The Windows Programming model Chapter1 – Introducing MFC Chapter1 – Your First MFC Application


Download ppt "Chapter 1: Hello, MFC Windows Programming Model Department of Digital Contents Sang Il Park."

Similar presentations


Ads by Google