#c #c #winapi
#c #c #winapi
Вопрос:
По какой-то причине я пытаюсь вызвать AdjustWindowRect или GetClientRect, и параметры, которые я предоставляю, в порядке. Я получаю около 30 ошибок, ни одна из которых не относится к вызову функции WinAPI.
Что могло вызвать такую вещь?
Спасибо
Например:
Следующий код:
case WM_GETMINMAXINFO:
{
LPMINMAXINFO p_info = (LPMINMAXINFO)lParam;
RECT rc = {0,0,d->w,d->h};
DWORD dwStyle = GetWindowLongPtr( hWnd, GWL_STYLE ) ;
AdjustWindowRect(amp;rc,dwStyle,FALSE);
int total_border_width = 2 * GetSystemMetrics( SM_CXFRAME ) 4;
int total_border_height = 2 * GetSystemMetrics( SM_CYFRAME )
GetSystemMetrics( SM_CYCAPTION ) - GetSystemMetrics( SM_CYBORDER ) 5;
POINT min,max;
min.x = d->min_w > 0 ? d->min_w total_border_width : p_info->ptMinTrackSize.x;
min.y = d->min_h > 0 ? d->min_h total_border_height : p_info->ptMinTrackSize.y;
max.x = d->max_w > 0 ? d->max_w total_border_width : p_info->ptMaxTrackSize.x;
max.y = d->max_h > 0 ? d->max_h total_border_height : p_info->ptMaxTrackSize.y;
p_info->ptMinTrackSize = min;
p_info->ptMaxTrackSize = max;
}
Выдает:
Error 6 error C2065: 'max' : undeclared identifier c:UsersJoshDocumentsAL51srcwinwwindow.c 844
Error 13 error C2065: 'max' : undeclared identifier c:UsersJoshDocumentsAL51srcwinwwindow.c 848
Error 16 error C2065: 'max' : undeclared identifier c:UsersJoshDocumentsAL51srcwinwwindow.c 849
Error 21 error C2065: 'max' : undeclared identifier c:UsersJoshDocumentsAL51srcwinwwindow.c 852
Error 5 error C2065: 'min' : undeclared identifier c:UsersJoshDocumentsAL51srcwinwwindow.c 844
Error 7 error C2065: 'min' : undeclared identifier c:UsersJoshDocumentsAL51srcwinwwindow.c 846
Error 10 error C2065: 'min' : undeclared identifier c:UsersJoshDocumentsAL51srcwinwwindow.c 847
Error 19 error C2065: 'min' : undeclared identifier c:UsersJoshDocumentsAL51srcwinwwindow.c 851
Error 12 error C2065: 'total_border_height' : undeclared identifier c:UsersJoshDocumentsAL51srcwinwwindow.c 847
Error 18 error C2065: 'total_border_height' : undeclared identifier c:UsersJoshDocumentsAL51srcwinwwindow.c 849
Error 9 error C2065: 'total_border_width' : undeclared identifier c:UsersJoshDocumentsAL51srcwinwwindow.c 846
Error 15 error C2065: 'total_border_width' : undeclared identifier c:UsersJoshDocumentsAL51srcwinwwindow.c 848
Error 1 error C2143: syntax error : missing ';' before 'type' c:UsersJoshDocumentsAL51srcwinwwindow.c 841
Error 2 error C2143: syntax error : missing ';' before 'type' c:UsersJoshDocumentsAL51srcwinwwindow.c 842
Error 4 error C2146: syntax error : missing ';' before identifier 'min' c:UsersJoshDocumentsAL51srcwinwwindow.c 844
Error 8 error C2224: left of '.x' must have struct/union type c:UsersJoshDocumentsAL51srcwinwwindow.c 846
Error 14 error C2224: left of '.x' must have struct/union type c:UsersJoshDocumentsAL51srcwinwwindow.c 848
Error 11 error C2224: left of '.y' must have struct/union type c:UsersJoshDocumentsAL51srcwinwwindow.c 847
Error 17 error C2224: left of '.y' must have struct/union type c:UsersJoshDocumentsAL51srcwinwwindow.c 849
Error 3 error C2275: 'POINT' : illegal use of this type as an expression c:UsersJoshDocumentsAL51srcwinwwindow.c 844
Error 20 error C2440: '=' : cannot convert from 'int' to 'POINT' c:UsersJoshDocumentsAL51srcwinwwindow.c 851
Error 22 error C2440: '=' : cannot convert from 'int' to 'POINT' c:UsersJoshDocumentsAL51srcwinwwindow.c 852
Комментарии:
1. Является ли этот код частью файла .c или .cpp?
2. Затем вам нужно переместить все объявления ваших переменных в начало блока, как указано Джеймсом Макнеллисом ниже.
Ответ №1:
Visual C поддерживает только C90 (не C99), поэтому при компиляции программы на C вы должны размещать объявления всех переменных в верхней части блока, перед любыми операторами.
Объявления min
, max
, total_border_height
и total_border_width
все они следуют по крайней мере за одним оператором в блоке.
Комментарии:
1. Нет, все создается как по волшебству простым удалением AdjustRect или любой другой функции winapi, я также переименовал min и max, не повезло.