Как избежать использования кнопки в приложении MFC? - PullRequest
0 голосов
/ 10 февраля 2010

Это мое первое приложение MFC, и, к сожалению, я не понимаю, как оно работает. Я нашел простое приложение MFC, которое получает список файлов по заданному пути. Я изменил этот код для своих нужд, но теперь у меня есть одна проблема. Что мое приложение должно сделать, это следующее. Он читает две буквы диска из файла. Затем получает список файлов для обоих дисков, а затем сравнивает их. Если на основном диске есть файлы, которых нет на дополнительном диске, он автоматически копирует их. Я сделал все это, но теперь я хочу, чтобы мое приложение работало без взаимодействия с пользователем. Оно должно просто показывать данные. К сожалению, оригинальное приложение 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() 

Но я не знаю, какое событие мне следует использовать. Я сделал все свои изменения, что мне было нужно, в функции CGetFileListDlg :: OnBnClickedButtonGetFileList (), поэтому я хочу вызвать ее. Я не знаю, важно это или нет, но во время копирования я хочу показать, какой файл я сейчас копирую.

Пожалуйста, кто-нибудь, помогите мне!

Заранее спасибо!

Kampi

Ответы [ 3 ]

1 голос
/ 10 февраля 2010

Вы должны переместить всю обработку файлов в свой собственный метод, после чего вы можете вызывать этот метод из любой точки, где вам нужно.

Преимущество этого состоит в том, что теперь вы можете протестировать код, вызывая метод при нажатии кнопки, а затем, когда вы довольны, что новый метод работает правильно, вы можете вызывать его из OnInitDialog или из любого другого места, которое кажется подходящим. .

1 голос
/ 11 февраля 2010

Вы можете смоделировать нажатие кнопки для вашей кнопки в функции OnInitDialog() (непосредственно перед return TRUE;):

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

Примечание. Для обновления окна может потребоваться вызов UpdateWindow() в обработчике кнопок.

1 голос
/ 10 февраля 2010

Ищите панель переопределений, когда вы находитесь в файле кода для вашего диалога. Добавить запись для OnInitDialog. Поместите туда весь код обработки файлов, если вы действительно хотите, чтобы он выполнялся после инициализации диалога.

...