Форум программистов, компьютерный форум CyberForum.ru

Visual C++

Войти
Регистрация
Восстановить пароль
 
Chronid
2 / 2 / 0
Регистрация: 23.03.2015
Сообщений: 55
#1

Правильное использование CFileDialog и SetWindowText - Visual C++

21.12.2016, 18:23. Просмотров 287. Ответов 0
Метки нет (Все метки)

Объяснить внятно и коротко не смогу, в коде все наглядно показано.
Участок кода небольшой:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void CBmpOpenDlg::OnFileOpenbmp()
{
    //Заголовок и путьт к файлу
    wchar_t FileName[500];
    wchar_t FileTitle[100];             //Ноги ошибки начинают расти тут
    FileName[0] = '\0';
 
    CFileDialog file(TRUE);
 
    file.m_ofn.lpstrFilter = TEXT("Bitmap picture files *.bmp\0*.bmp\0All FIles *.*\0*.*\0\0"); 
    file.m_ofn.lpstrFileTitle = FileTitle;    //Тут вылетает в момент открытия файла(если использовать char или wchar_t)
                                                                //Компилятор пишет что крашится стек вокруг FileTitle
    file.m_ofn.lpstrFile = FileName;
    file.m_ofn.lpstrTitle = L"Открыть BMP файл";
    file.DoModal();
 
    if (FileName[0] == '\0') return;
    
    SetWindowText(FileTitle);                    //А тут в момент закрытия программы если искользовать CString или char с
                                                                 //приведением "(LPWSTR)(LPCTSTR)"
 
    hbm = (HBITMAP)LoadImage(0, FileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE);
 
    GetObject(hbm, sizeof(BITMAP), (LPSTR)&bm);
 
    CRect wdRect;
    GetClientRect(&wdRect); 
    ClientToScreen(&wdRect);    
 
    SetWindowPos(NULL, wdRect.left - 4, wdRect.top - 42, bm.bmWidth + wdRect.left, bm.bmHeight + wdRect.top, NULL);
 
    OnPaint();
}


Мне интересно почему крашится стек при использовании char или wchar_t, и почему крашится прога при закрытии если использовать CString.
Как этим всем правильно пользоваться?
С меня громадная благодарность! ну и плюс в карму конечна.

Добавлено через 5 минут
Как обойти проблему я нашол секунд за 30, зделал так:
C++
1
SetWindowText(file.m_ofn.lpstrFileTitle);
И оставил wchar_t

Но почему функции так странно себя ведут, пытаюсь найти ответ уже полвечера.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2016, 18:23     Правильное использование CFileDialog и SetWindowText
Посмотрите здесь:
Visual C++ CFileDialog
Visual C++ CFileDialog и кое-что еще
(MFC) После вызова CFileDialog окно выглядит неактивным Visual C++
Visual C++ Идентификатор "CFileDialog" не определен
Visual C++ Правильное отображение пикселей
Правильное завершение потока Visual C++
Правильное создание релизной версии проекта в Visual Studio Visual C++
Правильное использование принтера Delphi
ActionScript Правильное использование removeChild
Правильное использование высоты HTML, CSS
Правильное использование rewrite nginx
Правильное использование Image C# .NET 3.x

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru