2011-11-18 23 views
5

Sin recursos, puedo crear mi interfaz de usuario con una matriz compleja de CreateWindow() y CreateWindowEx(), y WndProc() para procesar mis eventos.¿Cómo uso los recursos de diálogo en Win32?

Me di cuenta de que si hago clic con el botón derecho en la vista de recursos y hago clic en "agregar recurso", puedo dibujar un cuadro de diálogo con todos los controles. Esto me ahorraría una gran cantidad de tiempo si pudiera dibujar la interfaz como lo hago normalmente con C#.

Después de dibujar la interfaz con el editor de recursos, ¿cómo puedo crear la ventana desde el código? ¿Alguien puede proporcionar un ejemplo muy simple con un botón y mostrar cómo manejar un evento WM_COMMAND en ese botón, por favor?

Además, ¿generalmente esta es la forma en que las personas crean la GUI? ¿Hay alguna pérdida en flexibilidad para hacer esto? Incluso en C#, a menudo tengo que complementar la interfaz de usuario generada por el diseñador con mi propia interfaz de usuario generada por código, pero la mayoría de las veces me complace usar el diseñador.

Respuesta

5

Después de crear el cuadro de diálogo en el editor de recursos, llame CreateDialog (diálogo no modal, que hay que enviar los mensajes manualmente al igual que cuando se utiliza CreateWindow) o DialogBox (diálogo modal; la función no devuelve hasta que se cierre el cuadro de diálogo. hace el envío por usted) para hacer que aparezca el cuadro de diálogo. Al igual que pasa el proceso de ventana a RegisterClass, pasa el proceso de diálogo a esas funciones para la devolución de llamada de diálogo. Un ejemplo de DialogProc mira gustos esto:

BOOL DialogProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam){ 
    switch(iMessage){ 
    case WM_COMMAND: 
     switch(LOWORD(wParam)){ 
     case BTOK: 
      MessageBox(hDlg, "Hello, World!", NULL, NULL); 
      return TRUE; 
      break; 
     } 
     break; 
    } 
    return FALSE; 
} 

Ésta es una forma básica de la creación de un cuadro de diálogo. El método más sofisticado normalmente implica OOP, generalmente envolviendo cada recurso (botón, ventana, etc.) como un objeto C++ o usando MFC.

1

Si ha colocado su botón o cualquier control en algún diálogo, ese control ya está en estado creado. Para manejar los mensajes de estos controles secundarios en este cuadro de diálogo, debe anular el método OnCommand en la clase que está implementando su diálogo.

Por ejemplo:

//CDialog_ControlDlg is my Dialog class derived from CDialog 

//IDC_BUTTON_SAMPLE is the ID of the button which was palced on the dialog in the resource Editor.. 

BOOL CDialog_ControlDlg::OnCommand(WPARAM wParam,LPARAM lparam){ 
     int iNotiFicationMsg=HIWORD(wParam);//This is thenotification Msg from the child control 
     int iCommandId=LOWORD(wParam);//And Control ID of the Child control which caused that Msg 
     BOOL result=FALSE; 
     switch(iCommandId){ 
    case IDC_BUTTON_SAMPLE: 
     if(iNotiFicationMsg==BN_CLICKED) 
     { 
     //Your Code for handling this type of Msg for this control.. 

     } 
     break; 
    default: 
    { 
     //Specific Code; 

    } 

    return result; 
} 

} 
Cuestiones relacionadas