2009-12-02 14 views
5

Estoy usando la clase CPropertySheet para mi diseño en la aplicación MFC, normalmente en CPropertySheet habría 4 botones predeterminados ... Quiero ocultar/eliminar el botón AYUDA ... Probé lo siguiente ... pero no funciona/no responde. .I lo hice escribir en mi clase CPropertyPage ¿hay alguna otra manera ...Cómo eliminar el botón Ayuda predeterminado en CPropertySheet en MFC?

m_psh.dwFlags & = ~ PSH_HASHELP;

+0

¿Puede mostrarnos el código que conduce a CPropertySheet :: AddPage? – Goz

Respuesta

3
// Destroy the Help button 
CButton *btnHelp; 

btnHelp = reinterpret_cast<CButton *>(GetDlgItem(IDHELP)); 
btnHelp->DestroyWindow(); 
+0

tanx 4 ur reply ... no es un botón normal que puede eliminar usando la codificación anterior ... Estoy usando CPropertySheet: es un objeto que contiene su página de propiedades ... no funcionará ... de otra manera – kiddo

+0

Sé que estás usando CPropertySheet, y un botón es un botón. Puede intentar ((CWnd *) GetDlgItem (IDHELP)) -> ShowWindow (SW_HIDE); o puede ver las distintas muestras en Internet: http://www.functionx.com/visualc/articles/propsheetbtn.htm –

+0

Hola, Priyank, tu solución está dando 'Error en la aserción de depuración' en depuración y error de 'Violación de acceso' en la versión modo. Vi en todas partes que está funcionando para otros pero yo ... ¿por qué? ¿Cuál podría ser la diferencia? – Rick2047

2

Ir a cpp principal de su proyecto (en el que se define theApp).
Poner esta línea: ON_COMMAND(ID_HELP, CWinApp::OnHelp)

Aditya Palanki

+0

Esto no oculta ni elimina el botón Ayuda. Solo desconecta el botón de su función de controlador. Y lo que es peor ... elimina el controlador en otros lugares donde lo necesitabas. – sergiol

8

Las páginas de propiedades también tienen una bandera HASHELP que necesita ser limpiado. El siguiente código en el constructor de la hoja de propiedades debería funcionar:

// After the last AddPage() call: 
m_psh.dwFlags &= ~PSH_HASHELP; 
for(int i=0; i<GetPageCount(); ++i) 
    GetPage(i)->m_psp.dwFlags &= ~PSP_HASHELP; 

Como alternativa, también se puede modificar la bandera m_psp para cada página individual antes de llamar AddPage():

m_psh.dwFlags &= ~PSH_HASHELP; 
page1.m_psp.dwFlags &= ~PSP_HASHELP; 
AddPage(&page1); 
// ... 
+1

Observe la diferencia entre 'PS' ** H' **' _HASHELP' y 'PS' ** P **' _HASHELP'. Probé esto con 'CMFCPropertySheet', este código solo activó el botón Ayuda porque escribí mal.Pero ahora está ocultando el botón como se supone. – sergiol

+0

Solo para completar: si desea eliminar el botón Aplicar, simplemente agregue 'm_psh.dwFlags | = PSH_NOAPPLYNOW;'. Las páginas no tienen esta bandera, por lo que no hay nada que hacer en ellas. – sergiol

0

Esto debería funcionar:

Anule el método OnNotify de la clase derivada de PropertySheet, escriba el siguiente código en él

CWnd * hwnd = GetDlgItem (IDHELP); hwnd-> ShowWindow (SW_HIDE);

+0

Esto es una complicación innecesaria. – sergiol

Cuestiones relacionadas