PROGRAMAÇÃO PARA MS-WINDOWS EM C++ Alvaro Azevedo Faculdade de Engenharia Universidade do Porto Email: [email protected] 1 I PARTE Componentes do MS-Windows Graphical User Interface II PARTE Desenvolvimento de aplicações Windows em Visual C++ 2 1 I PARTE Menus • Pull Down Menus • Pop Up Menus • Context Menus (Right Mouse Button) Construção de menus... 3 Accelerator table (global) Ex: Ctrl+S File / Save F5 Window / Refresh 4 2 String table (global) Clear screen Effacer l’écran Ex: IDS_CLEAR_SCREEN Borrar la pantalla Apagar o écran Facilita a tradução do programa é suficiente traduzir o ficheiro .RC 5 Dialog Boxes Controls • Static Text • Buttons • Edit Boxes • Radio Buttons • Group Boxes • List Boxes • Check Boxes • Tab Control • Combo Boxes • etc. Construção de dialog boxes... 6 3 Toolbars • Dockable • Tooltips Statusbar • Pane Text • Help, Indicators 7 Graphics Device Interface (GDI) • Pen Linhas • Brush Superfícies • Font Texto FEUP Funções SetPixel, MoveTo, LineTo, Arc, Polyline PolyBezier, FillRgn, TextOut, etc. 8 4 Device Context (DC) Agrupa todas as opções relativas às saídas gráficas. Exemplos: • características da “Pen” • características da “Brush” • características da “Font” 9 Cor Variáveis do tipo COLORREF Ex: COLORREF myColor = RGB(255, 255, 128); 4 bits (16 cores) 16 cores puras fixas * 8 bits (256 cores) 20 cores puras fixas * + 16 ou 32 bits no problems * as restantes obtêm-se por dithering + para ter mais cores puras pode-se recorrer à MFC CPalette 10 5 Windows Messages Estão associadas a acontecimentos Exemplos: WM_PAINT WM_VSCROLL WM_MOUSEMOVE WM_LBUTTONDOWN WM_KEYDOWN WM_SETCURSOR WM_COMMAND WM_CREATE Vão para uma fila de espera e são processadas sequencialmente 11 AppWizard Geração de um “application framework” Pode ser configurado... 12 6 II PARTE Programação orientada para objectos C++ 13 A better “C” • Protótipos obrigatórios (mais segurança) • Operator overloading • cin, cout (em vez de scanf, printf) • new, delete (em vez de malloc, free) 14 7 B Classes A • Data members Ex: xA , yA , xB , yB Vector • Member functions Norma ( ) Retorna a norma do vector Note-se a ausência de parâmetros de passagem 15 Objectos Vector va, vb, vc; cout << vb.Norma(); Vector* pv; cout << pv Norma(); 16 8 Inheritance 4 2 7 2 9 0 Matriz Matriz genérica Matriz simétrica 7 0 5 Matriz esparsa 17 Aggregation Automóvel Motor Rodas Chassis 18 9 Polymorphism Virtual functions Constructors Destructors Scope resolution References Public/Private 19 MFC - Microsoft Foundation Classes CObject CString user objects CCmdTarget CWnd CPoint CTypedPtrList CFrameWnd CDialog SERIALIZATION CControlBar 20 10 Utilização das MFC CPen Caneta; Caneta.CreatePen(PS_SOLID, Espessura, Cor); CPen* pAntigaCaneta = pDC -> SelectObject(&Caneta); pDC->MoveTo(10, 10); pDC->LineTo(200, 200); pDC->SelectObject(pAntigaCaneta); 21 Document-View Architecture • Documents Entidades independentes umas das outras Ex: edifício A, edifício B • Views Diferentes modos de visualizar cada documento Ex: alçado do edifício A, perspectiva do edifício A 22 11 Acesso ao document a partir da view CMyDoc* pDoc = GetDocument(); int nLine = pDoc GetLineCount(); O processamento da generalidade dos acontecimentos é efectuado na view (Ex: key down, mouse move, etc.) 23 Class Wizard Ligação ao código de menu commands, messages e controls Selecção de um menu Execução de uma função Ex: Mudar/Cor OnMudarCor() WM_LBUTTONDOWN Dialog boxes OnLButtonDown(UINT nFlags, CPoint point) Criar uma classe para a dialog box e associar variáveis aos controls 24 12 Visual C++ 4.0 Ambiente integrado para o desenvolvimento de aplicações Editor de texto Editor de menus Class wizard Editor de dialog boxes Editor de bitmaps Editor de toolbars Editor de icons On-line Help Compilador/linker Browser 25 26 13