Red de conocimiento informático - Conocimientos de programación - 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?

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?

, use SDK para obtener el identificador de DC:

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. :

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;

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).