230 likes | 288 Views
Simple Gui in C++. Project Selecting. So Far. Registering the window class Creating the window. So Far. The major function/Handling Messages. WndProc Return value: LRESULT CALLBACK Parameters: HWND hWnd UINT message WPARAM wParam
E N D
So Far • Registering the window class • Creating the window
The major function/Handling Messages • WndProc • Return value: LRESULT CALLBACK • Parameters: HWND hWnd UINT message WPARAM wParam LPARAM lParam): • The function handles all events (message): • WM_CREATE • WM_PAINT • WM_LBUTTONUP
Handling Messages(Cont) • Historically wParam 16 bit lParam 32 bit; Today both 32 bit • Each message use those parameters differently • For example • WM_LBUTTON - lParam stores coordinates • LOWORD, HIWORD – extract two words
Message Queue • There are no interrupts • When messages are posted they are added to the message queue • After handling them they are removed
Working with Rectangles • GetWindowRect(m_hWnd,&rt1) • return the window rectangle in screen coordinates • GetClientRect(m_hWnd,&rt2) • return window rectangle in "itself" coordinates • SetWindowPos(m_hWnd,NULL,0,0,x,y ,SWP_NOMOVE|SWP_NOZORDER); • Determines the window position and size.
Painting • When does painting occur? • After receiving WM_PAINT
How to Paint • First get an handle to the screen hdc = BeginPaint(hWnd, &ps); • Using hdc in each “painting” function. • Do not forget • EndPaint(hWnd, &ps);
Painting functions • LineTo(hdc, int x, int y); • Line from current position to (x,y) • MoveToEx(hdc, int x, int y, NULL) • Move the position to (x,y)
case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... RECT rt,rt1; GetClientRect(hWnd, &rt); GetWindowRect(hWnd, &rt1); int x, y; y = (rt1.bottom - rt1.top) - rt.bottom; x = (rt1.right - rt1.left) - rt.right; //DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); MoveToEx(hdc,0,0, NULL); LineTo(hdc, 100,0); LineTo(hdc, 100,100); LineTo(hdc, 0,100); LineTo(hdc,0,0); SetWindowPos(hWnd,NULL,0,0,100 + x + 1, 100 + y + 1,SWP_NOMOVE|SWP_NOZORDER); EndPaint(hWnd, &ps);
Painting (Cont) • CreatePen(intnPenStyle,intnWidth,COLORREFcrColor) • Can paint in different styles and colors • SelectObject(hdc, HPEN pen) • The next object will be painted by pen • Ellipse(x,y,x1,y1) • The coordinates of the bounding rectangle
Alternative Ways • CPen*SelectObject( hdc, CPen*pPen); • CBrush*SelectObject( hdc, CBrush*pBrush); • CBitmap*SelectObject(hdc, CBitmap*pBitmap); • Etc…
Working with Bitmap(See Roy Bubis and Keren Michaeli Proj) • Insert Bitmaps to Resources • LoadImage • CreateCompatibleDC ( hdc ); - • Working on another hdc to avoid flickering • SelectObject(memdc, bmp); • TransparentBlt(hdc,x,y, dx, dy, memdc,0,0,width, height, RGB(255,0,0)); • //passing the content of medc to hdc
Forcing RePaint • InvalidateRect(m_hWnd,&rect,TRUE); • signal the OS that this window is invalid and need to be repaint. • The OS send all the invalid windows the WM_PAINT message
For more Information • A simple tutorial • MSDN!!!
Java - Graphics • Working with Graphics object • Graphics g • DrawLine • DrawRect • SetColor • ….
Applet • An applet is a small, embeddable Java Program. • “Usually” implementing a subclass of applet.
Handling events • The events that we want to handle should be define in our subclass • boolean mouseDown(Event e, int x, int y) • Boolean mouseDrag(Event e, int x, int y) • boolean keyDown(Event e, int x, int y) • Etc…