Sid 1 CD5250 Daniel Flemström MDH/IDT Windowsprogrammering
Sid 2 CD5250 Daniel Flemström MDH/IDT DOS Console Application main(..) { } Asd das asdlk Lasdkasld dldld Dlaieieiei ddd ”Console.lib” Skapar fönstret myMain.cpp main(..) { } main(..) { } Skriver ut 4 2 cout 5 cin 1.WinMain inuti ”console.lib” anropas 2.Fönstret Skapas 3.Din Main anropas 4.Cout skrivs ut till fönstret. 5.Tangentinmatningar kommer till cin 3 Myprog.exe
Sid 3 CD5250 Daniel Flemström MDH/IDT Windows Application WNDCLASS windowStyle WndProc hInstance icon background... WinMain { Register Class CreateWindow MessageLoop } WndProc() { Switch.. } myWinApp.EXE”Windows” message dispatch
Sid 4 CD5250 Daniel Flemström MDH/IDT WinMain int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wcex; wcex.style= CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc= (WNDPROC)WndProc; wcex.hIcon= LoadIcon(hInstance, (LPCTSTR)IDI_KILLERAPP); wcex.hCursor= LoadCursor(NULL, IDC_ARROW);... RegisterClassEx(&wcex); CreateWindow(....) while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
Sid 5 CD5250 Daniel Flemström MDH/IDT WndProc LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_TIMER: game.OnTimer( wParam, lParam); break; case WM_CHAR: game.OnChar( wParam, lParam); break;... case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
Sid 6 CD5250 Daniel Flemström MDH/IDT Windows Messages WM_CHAR, WM_GETTEXT och så vidare. •lparam och wparam betyder olika saker beroende på vilket meddelande. •Kommer från operativsystemet (tangent och mus) eller från program (set / get window text). •Du bestämmer vilka meddelanden ditt fönster ”förstår” och kan hitta på egna.
Sid 7 CD5250 Daniel Flemström MDH/IDT WM_CHAR
Sid 8 CD5250 Daniel Flemström MDH/IDT Bra Meddelanden att hantera •WM_CREATE När fönstret skapas. •WM_PAINT När fönstret behöver ritas om (tex om någon ändrat storlek) •WM_RESIZE Om någon ändrar storlek.
Sid 9 CD5250 Daniel Flemström MDH/IDT Rita (annat än i WM_PAINT) HDC hDc = GetDC(hWnd)... // Rita som sjutton... ReleaseDc(hWnd, hDc); DC = Device Context GDI
Sid 10 CD5250 Daniel Flemström MDH/IDT Rita Ett Streck MoveTo(hDc, 0,0,NULL) LineTo(hDc,10,20);
Sid 11 CD5250 Daniel Flemström MDH/IDT Flera Bra Ritgrejjor •Ellipse(hdc,...); •RoundRect(hdc,...); •Rectangle(hdc,...); •DrawText(hdc,...);
Sid 12 CD5250 Daniel Flemström MDH/IDT Ändra Färg Befintliga Färger och Penslar: hOldPen = SelectObject(hDc,GetStockObject(WHITE_PEN)); hOldBrush = SelectObject(hDc,GetStockObject(WHITE_BRUSH)); Göra Egna Färger och Penslar: HPEN hPen = CreatePen(PS_SOLID,RGB(255,0,0)); SelectObject(hDc,hPen); HBRUSH hBrush = CreateSolidBrush(RGB(10,20,39)); SelectObject(hD,hBrush); OBS! Avsluta alltid med att välja stock pen och brush + delete av egna! SelectObject(hOldPen); DeleteObject(hPen); // Endast på egengjorda! Högerklicka ”Goto definition of” För att se flera alternativ!
Sid 13 CD5250 Daniel Flemström MDH/IDT Alltogether Now! HDC hDc = GetDC(hWnd) HPEN pYellowPen = CreatePen(PS_SOLID, RGB(0,255,255)); HPEN hOldPen = SelectObject(pYellowPen); SelectObject(GetStockObject(GRAY_BRUSH)); Rectangle(hDc,10,10,20,20); SelectObject(pOldPen); DeleteObject(pYellowPen); ReleaseDc(hWnd, dc);
Sid 14 CD5250 Daniel Flemström MDH/IDT MER? •Enormt mycket mer finns att lära!!! •Alla fönster fungerar så här (Även activeXer internt) •Charles Petzold ”Programming Windows, The Definitive Guide to the Win32 API” Microsoft Press; ISBN: X; 5th Bk&Cd Rom edition (December 1998) •MFC Gömmer detta