J'ai fait une application MFC, et maintenant je veux désactiver le bouton de fermeture de la fenêtre pendant que je fais mes opérations de copie. Je l'ai fait RÉUSSI avec ce code:Comment utiliser CMenu dans une application MFC?
BOOL bEnable = FALSE; // To disable
UINT menuf = bEnable ? (MF_BYCOMMAND) : (MF_BYCOMMAND | MF_GRAYED | MF_DISABLED);
CMenu* pSM = GetSystemMenu( , FALSE);
if (pSM)
{
pSM->EnableMenuItem(SC_CLOSE, menuf);
}
Mais maintenant, à la fin de mon programme dans mon fil (UINT CopyThread (LPVOID pParam)) je veux le réactiver, mais je ne peux pas. J'ai passé plus tôt à mon thread le m_hWnd, et maintenant je ne vais pas passer à la fonction GetSystemMenu mais j'obtiens une erreur de compilation: erreur C2440: 'initializing': impossible de convertir 'HMENU' en 'CMenu *'. Je suis sûr que c'est une question facile, mais je suis un débutant, alors s'il vous plaît aider, mais je ne peux pas comprendre, ce que je fais usé!
Merci d'avance!
Kampi
Mise à jour: J'ai essayé de cette façon, qui fonctionne presque. Le Close "X" sera à nouveau noir, mais si j'appuie dessus, mon programme n'existe pas. Est-ce que je fais quelque chose de mal, ou c'est parce que quelque chose d'autre?
BOOL bEnable = TRUE; // To enable
UINT menuf = bEnable ? (MF_BYCOMMAND) : (MF_BYCOMMAND | MF_GRAYED | MF_DISABLED);
HMENU pSM = ::GetSystemMenu(Test->hWnd, FALSE);
if (pSM)
{
::EnableMenuItem(pSM, SC_CLOSE, menuf);
}
Sachez que CS_NOCLOSE affectera les fenêtres _ALL_ de cette classe dans le processus. Ce n'est généralement pas un problème pour votre fenêtre d'application, mais cela peut poser un problème pour les fenêtres contextuelles. –
Merci! C'est vrai. – minjang
Salut! J'ai mis à jour mon message. Cela fonctionne presque bien, mais appuyez sur le bouton après l'avoir réactivé, il ne se ferme pas :(Savez-vous pourquoi? – kampi