Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Возникла загвоздка с вызовом стандартного диалога открытия папки

8.6K
09 октября 2006 года
Xavier
69 / / 23.08.2006
Подскажите кто-нибудь, как можно вызвать диалог открытия папки?
406
09 октября 2006 года
vitaly2003s
481 / / 27.07.2004
Используй SHBrowseForFolder
Смотри MSDN и поиск по форуму с этой функцией.
257
09 октября 2006 года
kosfiz
1.6K / / 18.09.2005
 
Код:
BROWSEINFO brinfo;
    brinfo.hwndOwner=0;
    brinfo.pidlRoot=0;
    brinfo.pszDisplayName="ok";
    brinfo.lpszTitle="choose dir";
    brinfo.ulFlags=BIF_RETURNONLYFSDIRS;
    brinfo.lpfn=0;
    brinfo.lParam=0;
    SHBrowseForFolder(&brinfo);

должно получиться. и не забудь подключить shlobj.h
8.6K
10 октября 2006 года
Xavier
69 / / 23.08.2006
А в MFC есть какой-нибудь класс, который за это отвечает, как например за открытие и сохранение используется класс CFileDialog?
17K
10 октября 2006 года
_mrhx_
27 / / 09.10.2006
Незнаю на счет MFC, наверное есть, но там не так много надо писать.
Вот там есть примеры (на WinAPI): http://mrhx.narod.ru/soft/cpphlpr.exe
257
10 октября 2006 года
kosfiz
1.6K / / 18.09.2005
не понимаю зачем юзать какой-то класс, неужели 9 строчек это много.
8.6K
11 октября 2006 года
Xavier
69 / / 23.08.2006
Лан, это я решил! Вот может кто-нибудь знает ответ на этот вопрос:
В программе запускается поток, проводящий определённые вычисления. Как программно определить, что он запущен и при повторном нажатии на кнопку запуска сначала убивался действующий поток и запускался новый?
406
11 октября 2006 года
vitaly2003s
481 / / 27.07.2004
При создании новой нити запоминай возвращяемый тебе CreateThread хэндл этого потока. И потом если этот хэндл существует то можеш завершить поток спомощью TerminateThread и создать новый. Но все же лучше так не делать а использовать при необходимости завершения потока функции синхронизации типа эвентов мьютексов и т.д А в коде нити просто делаеш через определенный промежуток провеку состоянии этих объектов и если они находятся в сигнальном состоянии тогда завершаеш корректно поток. а в основной нити ждеш завершения текущего потока с помощью WaitForSingleObject и токо когда он возвратит успешный результат запускаеш новый поток.
8.6K
11 октября 2006 года
Xavier
69 / / 23.08.2006
Спасибо, помогло! Я уж и забыл, что чуществует TerminateThread!!!
ЗЫ А синхронизировать мне не нужно - поток не критичный и его немедленное завершение в принципе не должно дурно повлиять на основную нить!
8.6K
11 октября 2006 года
Xavier
69 / / 23.08.2006
Еще хочу уточнить оду вещь: у меня есть HWND контрола Progress Bar. Могу ли я Изменять Range и Position данного контрола, используя этот HWND?
406
11 октября 2006 года
vitaly2003s
481 / / 27.07.2004
конечно,если WINAPI то используй сообщения PBM_SETRANGE,PBM_SETPOS в любое время когда нужно
8.6K
12 октября 2006 года
Xavier
69 / / 23.08.2006
Не помогает. Вот кусок кода:
Код:
DWORD CALLBACK CopyProgressRoutine(
                 LARGE_INTEGER TotalFileSize,
                 LARGE_INTEGER TotalBytesTransferred,
                 LARGE_INTEGER StreamSize,
                 LARGE_INTEGER StreamBytesTransferred,
                 DWORD dwStreamNumber,
                 DWORD dwCallbackReason,
                 HANDLE hSourceFile,
                 HANDLE hDestinationFile,
                 LPVOID lpData)
{
    HWND hwndMainWin;
    HWND hwndProgrCtrl;
    CString sTFS;
    CString sTBT;
    sTFS.Format(_T("%i"), TotalFileSize);
    sTBT.Format(_T("%i"), TotalBytesTransferred);
    short FileSize = atoi(sTFS);
    short BytesTransferred = atoi(sTBT);

    hwndMainWin = FindWindow(NULL, "IBBackup");
    hwndProgrCtrl = GetDlgItem(hwndMainWin, IDC_COPY_PROGRESS);
        SendMessage(hwndProgrCtrl, PBM_SETRANGE, 0, MAKELPARAM(0, (FileSize)));
    SendMessage(hwndProgrCtrl, PBM_SETSTEP, (WPARAM) 1024, 0);
    SendMessage(hwndProgrCtrl, PBM_SETPOS, (WPARAM) BytesTransferred, 0);
    return PROGRESS_CONTINUE;
}

Что у меня неправильно?
257
12 октября 2006 года
kosfiz
1.6K / / 18.09.2005
что-то непонятно: ты что в чужой программе с прогрессбаром работаешь? потому что если в своей, то зачем FindWindow, т.к. после создания HWND твоего окна тебе известен.
к тому же если тебе известен идентификатор элемента управления, т.е. прогрессбара, то можно записать, например, так:
 
Код:
SendDlgItemMessage(hwndMainWin, IDC_COPY_PROGRESS, PBM_SETPOS, (WPARAM) 50,0)

ну или как тебе надо - у меня этот код для своего окна работает, т.е. позиция устанавливается.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог