2010-02-10 4 views
0

Ceci est ma première application MFC, et malheureusement je ne comprends pas, comment cela fonctionne. J'ai trouvé une application MFC simple, qui obtient la liste de fichiers d'un chemin donné. J'ai modifié ce code pour mes besoins, mais maintenant j'ai un problème. Ce que ma demande devrait faire est la suivante. Il lit deux lettres de lecteur à partir d'un fichier. Puis obtient la liste des fichiers pour les deux lecteurs, puis les compare. Si le lecteur principal contient des fichiers qui ne se trouvent pas sur le lecteur secondaire, il les copie automatiquement. J'ai fait tout cela, mais maintenant je veux que mon application s'exécute sans interaction de l'utilisateur. Elle devrait juste montrer les données. Malheureusement, l'application MFC d'origine a démarré lorsque j'ai appuyé sur un bouton. Je veux prendre cela, que je ne devrais appuyer sur aucun bouton, il copie juste les nouveaux fichiers automatiquement. Donc, mon problème est le suivant. Où dois-je appeler ma fonction, donc je n'ai pas besoin d'appuyer sur un bouton. Je pense que je devrais l'appeler ici:Comment éviter d'utiliser un bouton dans une application MFC?

BEGIN_MESSAGE_MAP(CGetFileListDlg, CDialog) 
ON_WM_PAINT() 
ON_WM_QUERYDRAGICON() 
//}}AFX_MSG_MAP 
ON_BN_CLICKED(IDC_BUTTON_GET_FILE_LIST, &CGetFileListDlg::OnBnClickedButtonGetFileList) //this is the original 
//call my function here 
END_MESSAGE_MAP() 

Mais je ne sais pas, quel événement je devrais utiliser. J'ai fait tous mes changements ce dont j'avais besoin dans la fonction CGetFileListDlg :: OnBnClickedButtonGetFileList(), c'est pourquoi je veux l'appeler. Je ne sais pas si c'est important ou non, mais pendant la copie je veux montrer quel fichier je copie actuellement.

Aidez-moi!

Merci d'avance!

Kampi

Répondre

1

Vous pouvez simuler un clic de bouton pour votre bouton dans la fonction OnInitDialog() (juste avant return TRUE;):

PostMessage(WM_COMMAND, MAKEWPARAM(IDC_BUTTON_GET_FILE_LIST, BN_CLICKED), 0); 

Remarque: Vous devrez peut-être appeler UpdateWindow() sur votre gestionnaire de bouton afin d'avoir la fenêtre rafraîchi.

+0

Salut, c'est peut-être une question dumm, mais où dois-je appeler la fonction OnCreate()? Ceci est ma première application MFC, donc je ne comprends pas beaucoup de ce que vous avez dit :(Pourriez-vous mybe poster un code, donc je peux le comprendre? – kampi

+0

code pertinent ajouté – djeidot

+0

Salut! Merci pour votre code, maintenant je suis essayer de comprendre Votre méthode fonctionne presque bien, mais maintenant, j'avais beaucoup de commentaires sur les lignes C'est (je pense) parce que ma fonction est appelée avant que la fenêtre a été créée, et donc je ne peux pas imprimer les lignes, Mais si je pouvais imprimer, alors je ne verrais rien, parce que quand la fenêtre de tge est créée, la copie est terminée, je me trompe, je ne fais que deviner. après que la fenêtre a été créée? Merci encore! – kampi

1

Recherchez le panneau overrides lorsque vous êtes dans le fichier de code pour votre boîte de dialogue. Ajoutez une entrée pour OnInitDialog. Mettez tout votre code de traitement de fichier là si vous voulez vraiment qu'il s'exécute une fois la boîte de dialogue est initialisée.

+0

Salut! Si je colle mon code dans OnInitDialog, cela fonctionne presque correctement, mais la fenêtre n'apparaît pas tant que la copie n'est pas terminée. Si la copie est terminée, alors seulement apparaît ma fenêtre. Devrais-je créer une autre fonction uniquement pour la copie et l'appeler depuis n'importe où? – kampi

1

Vous devez déplacer tout votre traitement de fichier dans sa propre méthode, vous pouvez ensuite appeler cette méthode où vous le souhaitez. L'avantage de ceci serait que vous pouvez tester le code maintenant en appelant la méthode quand le bouton est pressé, puis une fois que vous êtes heureux que la nouvelle méthode fonctionne correctement, vous pouvez l'appeler depuis OnInitDialog ou n'importe où ailleurs approprié.

+0

il a déjà déclaré que son code pour le traitement de fichiers est dans une fonction distincte. ** EDIT ** ack, il a effectivement mentionné le nom de la fonction plus tard, je viens de le voir. et c'est le gestionnaire de boutons. whoops! – Dave

Questions connexes