1 / 30

Chapter 1: Hello, MFC Windows Programming Model

Chapter 1: Hello, MFC Windows Programming Model. Department of Digital Contents Sang Il Park. Programming Models. Procedural Programming model Event-Driven Programming model (windows programming model). Procedural Programming Model. int main() { funcA(); funcB(); return 0; }.

stamos
Télécharger la présentation

Chapter 1: Hello, MFC Windows Programming Model

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Procedural Programming Model int main() { funcA(); funcB(); return 0; } { …… return; } { ….. return; } { funcC(); 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! Event Handling Message

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

  7. Event-driven Programming Model • 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

  8. Event-Driven Programming Model with more details:

  9. Messages, messages and more Messages 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 <iostream> 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. Message (Event) Message (Event) Handler Windows Procedure Message Loop

  14. Code: #include <iostream> 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 MessageLoop Message Handler

  15. A fancier code: int main() { inti; while(true) { cout<<"Input: "; cin>>i; procedure(i); } return 0; } void procedure(intmsg) { 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 <windows.h> 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); }

  23. Compile and Run it!

  24. Code looks complex, but… #include <windows.h> 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); } 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; Add this!

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

  27. Result:

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

  29. Then, What is MFC ? To be continued…

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

More Related