Red de conocimiento informático - Conocimiento informático - Código fuente del calendario menstrual

Código fuente del calendario menstrual

VC tiene su propio control de calendario CMonthCalCtrl.

/code/legacy/controls/monthcalctrlcalendar . zip

Al leer MSDN2003, puede ver que MFC proporciona 18 controles comunes. No los enumeraré en detalle, pero puedes verlos en MSDN\Visual Studio. MSDN2003 .NET\Visual c\Agregar funciones\MFC\Interfaz de usuario\Controles\etc. Cada control corresponde a una clase MFC. Las descripciones detalladas de estas clases se pueden encontrar en MSDN\Visual Studio. MSDN2003.

Hay dos formas de agregar controles en MFC.

El primer método es arrastrar el control directamente desde la barra de herramientas Controles al formulario. Este enfoque es intuitivo, pero se limita a aplicaciones MFC basadas en diálogos. Para ello, me centraré en el segundo método.

El segundo método es usar la clase MFC para agregar controles dinámicamente. Presentaré este método usando el control de calendario mensual como ejemplo. La clase MFC correspondiente al control de calendario mensual es CMonthCalCtrl.

El primer paso es agregar un puntero de miembro al formulario: CMonthCalCtrl * m _ pCtrlMonth.

El segundo paso es inicializar los controles al inicializar el formulario. La inicialización del formulario mencionada aquí no es la función de inicialización de la clase de formulario, sino la función de OnInitialUpdate () o OnInitDialog ().

m _ pCtrlMonth = new CMonthCalCtrl

m _ pCtrlMonth->create(WS_VISIBLE | WS_CHILD | WS_BORDER | MCS_ NOTODAY,rect,this,IDC_ MCC

m _ pCtrlMonth- gt; MOSTRAR ventana (SW _ SHOW);

La función Create() tiene cuatro parámetros:

Los primeros parámetros son una combinación de definiciones de macro que especifican el estilo del control. Por ejemplo, WS_VISIBLE significa que el control es visible cuando se inicializa, WS_CHILD significa que el control es un subformulario, WS_BORDER significa que el control tiene un borde y MCS_NOTODAY significa que el control no mostrará la fecha de hoy en la parte inferior. Para conocer los estilos de control, puede consultar MSDN. Varios estilos de formulario se describen en msdn\Visual Studio. NET\Visual c\Visual c Reference\Estructuras, estilos, devoluciones de llamadas y mapas de mensajes\Estilos utilizados por MFC. El estilo único de un control específico se proporciona cuando MSDN describe las capacidades de creación de la clase correspondiente de un control.

El segundo parámetro es una referencia a la estructura RECT, que representa las coordenadas de posición del control en el formulario.

El tercer parámetro es un puntero al formulario principal del control.

El cuarto parámetro es el ID del recurso del control. Es posible definir #defineid_control * * * * *.

Ahora el control se ha inicializado básicamente con éxito, al igual que otros controles. La diferencia radica en el estilo del control y la clase MFC correspondiente al control. A continuación, puede configurar las propiedades del control y agregar mensajes de control. Aquí solo presento las novedades de dos controles de calendario mensuales de uso común.

MCN_SELECT_MESSAGE: el controlador de mensajes que activa este mensaje cuando se selecciona una fecha de finalización.

Mensaje NM_RELEASEDCAPTURE: hay un Scoll en el control del calendario. Al hacer clic en Scoll se activará la función de procesamiento del mensaje. De forma predeterminada, hacer clic en Scoll una vez cambiará el control durante un mes y puede configurar el mes de cambio a través de la función SetMonthDelta. m_pCtrlMonth-gt;SetMonthDelta(3) representa la conversión de tres meses.

Si agregas el estilo MCS_DAYSTATE al control, podrás mostrar el estado de la fecha. Este estado resalta ciertos días del mes que se muestra actualmente y la información de estado se representa como el tipo de datos de 32 bits MONTHDAYSTATE. Cada bit en el campo de bits MONTHDAYSTATE (1 a 31) representa el estado de un día de enero. Si un bit está activado, la fecha correspondiente se mostrará en negrita; de lo contrario, la fecha se mostrará sin énfasis. Hay dos formas de establecer el estado de la fecha de un control MonthCalendar: llamando explícitamente a cmoncalctrl::SetDayState o manejando el mensaje de notificación MCN_GETDAYSTATE.

Mensaje MCN_GETDAYSTATE: este método tiene una descripción detallada en chino en MSDN\Visual Studio. NET\Visual C\Add Function\MFC\User Interface\Control\Use CMonthCalCtrl\Establezca el estado del día del control MonthCalendar\.

Un método es llamar a la función SetDayState. Por ejemplo, en la función de procesamiento de mensajes NM_RELEASEDCAPTURE, inicialice qué días de este mes deben resaltarse:

SYSTEMTIME timeFrom

.

SYSTEMTIME timeUntil

int nCount = m_pCtrlMonth- gt;GetMonthRange(amp;time from amptimeUntil, GMR_day state);

LPMONTHDAYSTATE pDayState

pDayState = new mes estadodía[nCount];

memset(pDayState, 0, sizeof(mes díaestado)* nCount);

int nIndex =(tiempo desde . wday == 1)? 0: 1;

pDayState[nIndex]| = 1 lt; //El cuarto día

pDayState[nIndex]| = 1 lt18; /p>

pDayState[nIndex]| = 1 lt; lt24; //Día 25

Verificar(m_pCtrlMonth-gt;SetDayState(nCount, pDayState));

Eliminar []pDayState;

Este código se proporcionó cuando MSDN introdujo la función SetDayState. De hecho, el principio es muy sencillo. Hay una propiedad en el control que representa el estado de estas fechas. Usted mismo define una copia de esta propiedad, luego establece el estado de la fecha en la copia y finalmente llama a la función SetDayState para transferir la información de la copia a las propiedades del control.