void LoadImageFile(HDC hDC, HWND hWnd, RECT rect, LPWSTR lpsName)
{
MessageBoxW(hWnd,lpsName,"",MB_OK);
UINT WidthW, HeigthW;
::GetClientRect(hWnd, &rect);
WidthW = .....;
.....;
.....;
..;
}
global variable
Загружаю фотку вот таким способом:
Получения имени и пути к изображению
UINT OpenFileFromDialog(HWND hWnd, OPENFILENAME ofn, RECT rect)
{
char szFile[300];
szFile[0] = 0;
memset(&ofn,0,sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "*.image files\0 ";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if (GetOpenFileName(&ofn)==TRUE)
{
USES_CONVERSION;
lpsname = T2W(ofn.lpstrFile);
::GetClientRect(hWnd, &rect);
::InvalidateRect(hWnd,&rect,TRUE);
SendMessage(hWnd, 0x000f,0,0);
}
else return 0;
return 1;
}
Показываю изображение в wm_paint
void LoadImageFile(HDC hDC, HWND hWnd, RECT rect, LPWSTR lpsName)
{
UINT WidthW, HeigthW;
::GetClientRect(hWnd, &rect);
WidthW = rect.right;
HeigthW = rect.bottom;
Graphics *graphics = new Graphics(hDC);
Image *image = new Image(lpsName,TRUE);
graphics->DrawImage(image, 0,0,WidthW,HeigthW);
delete image;
delete graphics;
}
Дело в том, что когда я открываю ее первый раз она нормально загружается, а когда я изменяю размер окна, то в глобалной переменной где хранится имя и путь к фалу совсем непонятное мне значение.
А что за глобальная переменная?char szFile[300] которая?
Цитата: @pixo $oft
А что за глобальная переменная?char szFile[300] которая?
Вероятно, lpsname.
Надо ещё посмотреть на то, как LoadImageFile вызывается. Узнать, как автор темы узнает, что в строке непонятное значение. Немного OPENFILENAME ofn смущает, которое передается по значению.
Цитата: @pixo $oft
А что за глобальная переменная?char szFile[300] которая?
Очень смешно!
lpsname - глобальная переменная,
как узнаю? ну либо textout(), либо messagebox.
Цитата: rookie
как узнаю? ну либо textout(), либо messagebox.
Не очень удобно, но ладно. Так какую переменную заносишь в MessageBox? lpsname или lpsName? Вообще, покажи как смотришь.
Цитата: Kogrom
Не очень удобно, но ладно. Так какую переменную заносишь в MessageBox? lpsname или lpsName? Вообще, покажи как смотришь.
Код:
messagebox Показывает квадратики,
textout выводит ББББББББББББББ и т.д.
MessageBoxW(hWnd, lpsname, "", MB_OK);
то есть обратиться к глобальной переменной (с маленькой n), а не к параметру функции LoadImageFile (с большой N). Тоже квадраты будут?
Цитата: Kogrom
А если попробовать так:
MessageBoxW(hWnd, lpsname, "", MB_OK);
то есть обратиться к глобальной переменной (с маленькой n), а не к параметру функции LoadImageFile (с большой N). Тоже квадраты будут?
MessageBoxW(hWnd, lpsname, "", MB_OK);
то есть обратиться к глобальной переменной (с маленькой n), а не к параметру функции LoadImageFile (с большой N). Тоже квадраты будут?
не помогает, вызывал перед функцией в ней, глобальную, локальную, все равно значение теряется.
Тренировка в телепатии - это конечно хорошо, но тебе то от этого лучше не будет.
архив с программой
Вначале LPSTR to LPWSTR я конверитровал макросом из ATL библиотеки
Код:
USES_CONVERSION;
lpsname = T2W(ofn.lpstrFile);
lpsname = T2W(ofn.lpstrFile);
Сделал по другому через MultiByteToWideChar
Код:
int length = MultiByteToWideChar(CP_ACP,0,ofn.lpstrFile,-1, NULL, 0);
wchar_t *buffer = new wchar_t[length];
MultiByteToWideChar(CP_ACP, 0, ofn.lpstrFile, -1, buffer, length);
lpsname = buffer;
wchar_t *buffer = new wchar_t[length];
MultiByteToWideChar(CP_ACP, 0, ofn.lpstrFile, -1, buffer, length);
lpsname = buffer;
Все работает.
Остался только вопрос, почему используя T2W происходит такая фигня?