Describa brevemente (1) el principio del mecanismo de respuesta de mensajes. (2) ¿Cuáles son las clasificaciones del marco básico y las funciones básicas de las aplicaciones visuales basadas en MFC Class Wizard?
HDC hdc
hdc =::GetDc(m_hWnd); //Obtener el identificador de DC
MoveToEx(hdc); , m_ptOrigin.x, m_ptOrigin.y, NULL);
LineTo(hdc, point.x, point. y);
* liberar DC(m_hWnd, hdc);/ / Libere DC
2. Utilice el puntero de clase CDC y la función miembro de clase CWin para obtener DC.
CDC * pDC = GetDC();
pDC->; mover a(m _ ptOrigin);
pDC->;
liberar DC (pDC);
3. Utilizar el objeto CClientDC. (La clase CClientDC se deriva de la clase CDC)
CClientDC dc (este);
Washington. mover a(m_ptOrigin);
Washington. LineTo(point);
Descripción:
La clase CClientDC se deriva de CDC y es responsable de llamar a la función de Windows GetDC durante la construcción y de llamar a ReleaseDC durante la destrucción. Esto significa que el contexto del dispositivo asociado con el objeto CClientDC es el área de cliente de una ventana.
4. Utilice el objeto CWindowDC. (La clase CWindowDC se deriva de la clase CDC)
CWindowDC dc(this); //
Washington. mover a(m_ptOrigin);
Washington. LineTo(point);
Descripción:
La clase CWindowDC se deriva de CDC. Llama a la función de Windows etWindowDC cuando se construye y ReleaseDC cuando se destruye. Esto significa que el objeto CWindowDC accede a toda el área de pantalla de CWnd (incluidas las áreas cliente y no cliente).
5. GetParent() obtiene el puntero de la ventana principal; GetDesktopWindow() obtiene el puntero de la ventana de la pantalla.
6. Utilice el pincel para cambiar el color y el tipo de línea:
CPen pen(PS_DOT, 1, RGB(0, 255, 0));
CClientDC dc(este); CPen *pOldPen=dc. SelectObject(&Pen); //Selecciona el pincel para DC.
Washington. mover a(m_ptOrigin);
Washington. LineTo(punto);
Washington. select object(pold pen); //Restaurar el pincel anterior
7. Uso de pinceles (normalmente se utilizan pinceles para rellenar áreas rectangulares):
Usar pinceles de un solo color
CBrush brush(RGB(255, 0, 0)); //Construir un objeto pincel
CClientDC dc(this);
Washington. FillRect(CRect(m_ptOrigin, point), & brush); // Rellena el área rectangular con el pincel especificado.
Utilice un pequeño pincel
CBitmap bitmap; //Construya un objeto de mapa de bits (se requieren pruebas preliminares antes de su uso)
Bitmap. cargar mapa de bits(IDB_bitmap 1); //Arrancar objeto de mapa de bits
Cepillo pincel(& mapa de bits //Pincel de dibujo de construcción
CClientDC dc(this);
Washington.
FillRect(CRect(m_ptOrigin, point), & brush); // Rellena el área rectangular con el pincel de mapa de bits especificado.
Usar pincel transparente
CB rush * Pb rush = CB rush::from handle((HBRUSH)GetStockObject(NULL _ BRUSH) //Obtener el puntero del objeto de pincel transparente
CClientDC dc(este);
CBrush *pOldBrush=dc. seleccione objeto (Pb rush); //Seleccione el pincel transparente para ingresar a DC.
Washington. Rectángulo(CRect(m_ptOrigin, punto));
Washington. select object(pold brush); //Libera el pincel transparente
Descripción:
La función GetStockObject recupera un identificador de un lápiz, pincel, fuente o paleta de inventario predefinido.
HGDIOBJ GetStockObject(
int fnObject //Tipo de objeto de stock
);
Cuando el identificador del objeto HBRUSH de Windows es dado, devuelve un puntero al objeto CBrush.
Rush CB estática * PASCAL from handle(HBRUSH HBRUSH); //FromHandle es un método estático, por lo que se puede llamar en forma de CBrush::FromHandle().
Nota:
1) Los métodos estáticos no pertenecen a objetos específicos, sino a la clase misma. Cuando se carga la clase, el código se ha asignado al método estático de la clase, por lo que se puede llamar en forma de CBrush::FromHandle().
2) En los métodos estáticos, no se puede hacer referencia a miembros y métodos de datos no estáticos.
3) Los miembros de datos estáticos deben inicializarse por separado fuera de la clase, como: tipo de variable nombre de clase:: nombre de variable = valor inicial
8. : p>
int setrop 2(int nDrawMode);
Establece el modo de dibujo actual.
(5) Programación de texto
1. Crear cursor:
void createsolidcare(int nWidth, int n height //Crear cursor
; p>void create caret(cbit map * pbit map); //Crear cursor de mapa de bits
void show caret(); //Mostrar cursor
void hide caret(); ; //Ocultar cursor
Estático vacío PASCAL SetCaretPos(point); //Mover cursor
Descripción:
1) Crear ventana de cursor Después de la creación, el cursor creado por la función CreateSolidCaret se inicializa para estar oculto, por lo que es necesario llamar a ShowCaret() para mostrarlo.
2) Cuando se utiliza la función CreateCaret para crear un insertador de mapas de bits, los objetos de mapas de bits locales no se pueden utilizar para asociar recursos de mapas de bits. Cuando se destruye un objeto C++ asociado con un recurso, el recurso asociado con él también se destruirá. )
2. Obtenga la información métrica de la fuente actual: CDC::GetTextMetrics
BOOL gettext metrics(LPTEXTMETRIC LP metrics)const;
Descripción:
Estructura typedef tagTEXTMETRIC {
int tmHeight//Altura de fuente. Especifica la altura del carácter (ascendente + descendente).
int TMA Stam; //altura de fuente por encima de la línea base
int tmDescent //altura de fuente por debajo de la línea base
int tmInternalLeading
int tmExternalLeading
int tmAveCharWidth//Ancho promedio de caracteres
int tmMaxCharWidth
int tmWeight
byte tmItalic
Byte TM subrayado;
Byte tmStruckOut
Byte tmFirstChar
Byte tmLastChar
BYTE tmDefaultChar
Byte tmBreakChar
Byte tmPitchAndFamily
Byte tmCharSet
int tmOverhang
int tmDigitizedAspectX
int tmDigitizedAspectY
} TEXTMETRIC
3. Función OnDraw:
Virtual void OnDraw( CDC* pDC)
Cuando la ventana (comenzando desde cero o cambiando de tamaño, etc.) .) necesita volver a dibujarse, se enviará el mensaje WM_PAIN y se llamará a la función OnDraw para volver a dibujar.
4. Obtenga la altura y el ancho de la cuerda (distinga la longitud de la cuerda):
CDC::GetTextExtent
CSize gettext extend(LPCTSTR lpszString , int nCount) const;
CSize gettextextend(const CString & str)const;
Descripción:
La clase CSize es similar a la estructura de tamaño de ventana.
tamaño de etiqueta de estructura typedef {
int cx//x range
int cy//y range
} tamaño; p>
5. Capa de ruta:
BOOL comenzar ruta();
//Dibuje aquí para definir el área de corte de la capa de ruta.
BOOL EndPath();
BOOL SelectClipPath(int nMode); //Llame a esta función para interactuar con el área de recorte de la capa de ruta actual y la nueva área de recorte.
//Defina una nueva área de corte en esta superposición (incluida el área de la capa de ruta previamente definida).
Descripción:
1) SelectClipPath selecciona la ruta actual como región de recorte del contexto del dispositivo, fusionando la nueva región con cualquier región de recorte existente utilizando el patrón especificado. El contexto del dispositivo identificado debe contener una ruta cerrada.
////
nMode:RGN_AND, RGN_COPY, RGN_DIFF, RGN_OR, RGN_XOR
Y la nueva área de recorte incluye la intersección del área de recorte actual y la ruta actual (área superpuesta).
RGN_COPY La nueva área de recorte es la ruta actual.
RGN_DIFF La nueva área de recorte incluye el área del área de recorte actual y se excluye el área de la ruta actual.
RGN _ o la nueva área de recorte incluye la unión del área de recorte actual y la ruta actual (área combinada).
RGN_XOR La nueva área de recorte incluye la unión del área de recorte actual y la ruta actual, pero no hay ningún área superpuesta.
2) Aplicación: cuando utilizamos un gráfico, si queremos que una determinada parte del gráfico sea diferente de otras partes, podemos colocar esta parte del gráfico en la capa de ruta y luego llamar a la El modo de interoperabilidad especificado para llamar a la función SelectClipPath (int nMode) permite que la capa de ruta interopere con el nuevo área de recorte de dibujo que la cubre para lograr efectos especiales.
6. Algunas funciones sobre cadenas de texto:
COLORREF GetBkColor()const; //Obtener el color de fondo
Virtual COLORREF SetBkColor(COLORREF Cr color); //Establece el color de fondo
BOOL SetTextBkColor(COLORREF Cr); //Establece el color de fondo del texto
Virtual COLORREF SetTextColor(COLORREF Cr color); /p >
Virtual BOOL TextOut(int x, int y, LPCTSTR lpszString, int nCount); //Texto de salida
BOOL TextOut(int x, int y, const CString & ampstr);
CString Left(int nCount)const; //Obtiene nCount caracteres en el lado izquierdo de la cadena.
int GetLength()const; //Obtiene la longitud de la cadena
7. Font CFont::CFont
CFont(); /p>
//Construir un objeto CFont. El objeto de resultado debe inicializarse con CreateFont, CreateFontIndirect, CreatePointFont o CreatePointFontIndirect antes de poder utilizarlo.
Seleccione el grupo de códigos de mayúsculas y minúsculas:
CClientDC dc (this);
CFont font; //Construir un objeto de fuente
font; . CreatePointFont(300, "letras chinas", vacía); //Inicializa los objetos de fuente, que están asociados con los recursos de fuente.
CFont *pOldFont=dc. seleccionar objeto(& fuente); //Seleccionar nueva fuente en DC.
...
Washington. select object(pold font); //Restaurar la fuente original
Descripción:
1) Al construir el objeto de fuente, se debe inicializar. (La inicialización consiste en asociar el objeto de fuente con el recurso de fuente).
2) Al inicializar el objeto, la fuente seleccionada también puede ser la fuente del sistema, pero no todas son válidas. La selección se basa en pruebas.
8. En MFC, las clases CEditView y cRichEditView han completado el procesamiento de texto preliminar. Puede basar las clases de vista de su aplicación en las clases CEditView y cRichEditView.
9. Decoloración suave
CDC::TextOut() genera letra por letra, lo que no puede lograr un efecto suave.
CDC::DrawText(): limita la salida de texto a un área rectangular y el texto más allá del área rectangular se trunca. Con esta función, puede aumentar el tamaño del rectángulo a intervalos para lograr un efecto de suavizado para el ojo humano.
CWND::setter(): Configura el temporizador. Envía un mensaje WM_TIMER a una hora determinada.
Descripción:
UINT SetTimer(UINT nIDEvent, UINT nElapse, void(exportación de devolución de llamada *lpfnTimer)(HWND, UINT, UINT, DWORD));
//nIDEvent Timer representa el intervalo para enviar mensajes nElapse, y Void(callback export * LPFNtimer)(hwnd, uint, uint, dword) establece la función de devolución de llamada. Si se configura, los mensajes WM_TIMER serán manejados por la función de devolución de llamada establecida. Si la función de devolución de llamada no está configurada en NULL, el mensaje WM_TIMER enviado se enviará a la cola de mensajes y se entregará a la ventana asociada para su procesamiento (agregue WM).
afx _ msg void on timer(UINT nIDEvent);
//En respuesta al mensaje WM_TIMER, nIDEvent marca el temporizador correspondiente al mensaje (se pueden configurar diferentes temporizadores para enviar el mensaje WM_TIMER).