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

Visual C++

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

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

21.12.2016, 18:23. Просмотров 289. Ответов 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 fileDlg (TRUE, NULL, ".txt", ....... Выдается ошибка о невозможности преобразования...

CFileDialog и кое-что еще - Visual C++
Здравствуйте, мне нужна помощь в использовании CFileDialog. Задача состоит в том, что когда диалог сразу открывается в текущей папке то там...

(MFC) После вызова CFileDialog окно выглядит неактивным - Visual C++
Вызываю по пункту меню диалог открытия файла таким образом: CFileDialog dlg(true); int rez=dlg.DoModal(); После закрытия...

Идентификатор "CFileDialog" не определен - Visual C++
Делаю класс для работы с мп3. Но возникает ошибка в 28 строке. #include "stdafx.h" #include "CMp3.h" #include "vfw.h" ...

Правильное использование принтера - Delphi
Если кто знает, то, пожалуйста, помогите!!! Я написал программу и не знаю как толком выводить на принтер с предварительным просмотром и т....

Правильное использование тега <p> - HTML, CSS
В общем такая беда. Есть стиль: p { margin:12px 15px; } ul, ol { margin:0 15px 15px 0; }

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2016, 18:23
Привет! Вот еще темы с ответами:

Правильное использование UserControl - C#
Здравствуйте. Жажду помощи) Задача - в Элемент UserControl (ну или в какой-нибудь другой. Если есть лучше - скажите)) накидать описание...

Правильное использование паттернов - ООП и паттерны
Всем привет. Пишу в этот топик впервые. Недавно начал изучать паттерны, и как раз на носу курсовая(язык Java). В курсовой будет...

Правильное использование Stream - C#
Насколько я понимаю правильные вариант примерно такой using ( MemoryStream ms = GetStream()) { using (var fileStream = new...

Правильное использование Limit - MySQL
Привет, хочу использовать Limit в пагинации страниц, и вот собственно вопрос, можно ли использовать $query = 'SELECT * FROM guestbook LIMIT...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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