Sosiskin
Интересующийся
Offline
|
|
« : 18-08-2010 18:12 » |
|
Создаю отдельную процедуру для обработки сообщений от элементов, которые находятся на GroupBox. сам GroupBox лежит на главной форме. Всё работает нормально, но только GroupBox не хочет отрисовываться на форме (( WNDCLASS ww;
GetClassInfo(hInst,"BUTTON",&ww); ww.lpszClassName = "grpBox"; ww.lpfnWndProc = GrpBoxWndProc; RegisterClass(&ww);
//не хочет рисовать GroupBox на форме HWND hGroupBox = CreateWindow("grpBox","Traning",WS_CHILD |WS_VISIBLE | WS_BORDER | BS_GROUPBOX,10,10,300,100,hWnd,(HMENU) 100, hInst,NULL);
//Кнопку рисует CreateWindow("button", "Start Traning", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 20, 20,200,100, hGroupBox, (HMENU)118, hInst, NULL);
Процедура обработки кнопки LRESULT CALLBACK GrpBoxWndProc(HWND hGroupBox, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: if(LOWORD(wParam)==118) { MessageBox(hWnd, "работает", "!", MB_YESNO|MB_ICONQUESTION); } break; default: return DefWindowProc(hGroupBox, message, wParam, lParam); } return 0; }
|
|
|
Записан
|
|
|
|
Sosiskin
Интересующийся
Offline
|
|
« Ответ #1 : 18-08-2010 18:14 » |
|
Собственно вопрос. Почему не хочет рисовать?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 18-08-2010 18:32 » |
|
где пишешь ? Используешь только АПИ? Просто вот эта фраза непонятна от элементов, которые находятся на GroupBox
"в АПИ" и в MFC этот элемент ничего программно не группирует - лишь визуально, рисуя рамочку по своему краю. А по вопросу - 1) не рисует - то есть, даже рамку не видать? 2) что возвращает GetLastError() после вызова CreateWindow ? 3) все ли свойства указаны? Например, спай показывает у рамки следующие свойства:
|
|
|
Записан
|
|
|
|
Sosiskin
Интересующийся
Offline
|
|
« Ответ #3 : 18-08-2010 19:36 » |
|
Ок. Поясню. Пишу в Visual C++ 2008 на ВИН АПИ. Я создаю на главной форме GroupBox, на котором располагаю пару Радио Баттон`ов и кнопку ОК. Наследую их от GroupBox. Делаю это для того, чтобы задав координаты GroupBox, можно было легко переместить его в любую часть окна, не испортив положения кнопок внутри GroupBox.
Функция:
HWND hGroupBox = CreateWindow("BUTTON","Traning",WS_CHILD |WS_VISIBLE | BS_GROUPBOX,10,10,300,100,hWnd,(HMENU) 100, hInst,NULL);
со свойствами WS_CHILD |WS_VISIBLE | BS_GROUPBOX , легко создаёт GroupBox, но стоит только зарегистрировать класс, как рамка пропадает (( параметр WS_BORDER выделяет просто прямоугольник, но это не то, чего хотелось бы.
На счет GetLastError(). Можно примерчик в какой момент и как её запускать ?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 18-08-2010 19:43 » |
|
Наследую их от GroupBox.
это тоже поясни ) Как радиокнопки можно наследовать от GroupBox ? Делаю это для того, чтобы задав координаты GroupBox, можно было легко переместить его в любую часть окна, не испортив положения кнопок внутри GroupBox.
это автоматом не произойдёт - рамка никак не связана с радиокнопками. Всё надо двигать вручную счет GetLastError(). Можно примерчик в какой момент и как её запускать ?
просто вызвать и посмотреть код. Но, судя по всему, тут это не поможет, ошибка в логике А прицепи проект? Только удали папки debug, release и файл *.ncb
|
|
|
Записан
|
|
|
|
Sosiskin
Интересующийся
Offline
|
|
« Ответ #5 : 18-08-2010 20:07 » |
|
Наследую их от GroupBox.
это тоже поясни ) Как радиокнопки можно наследовать от GroupBox ? Функция, которая создаёт GroupBox, возвращает HWND ГроупБокса. И при создании новой кнопки я его и указываю в качестве Parent`a, а не главное окно. Всё хорошо двигается при указании координат для GroupBox`a. вот примерчик: [red]HWND hGroupBox[/red] = CreateWindow("BUTTON","Traning",WS_CHILD |WS_VISIBLE | BS_GROUPBOX,10,10,300,100,hWnd,(HMENU) 100, hInst,NULL);
CreateWindow("button", "Start Traning", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 20, 20,200,100,[red] hGroupBox[/red], (HMENU)118, hInst, NULL);
|
|
|
Записан
|
|
|
|
lapulya
Молодой специалист
Offline
|
|
« Ответ #6 : 18-08-2010 23:59 » |
|
но стоит только зарегистрировать класс, как рамка пропадает что именно ты регистрируешь? Регистрировать элементы стандартных контролов (их окон) не надо. Короче, код регистрации в студию!
|
|
|
Записан
|
С уважением Lapulya
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 19-08-2010 03:22 » |
|
Всё хорошо двигается при указании координат для GroupBox`a.
хм, интересно. Надо будет проверить, щас немного занят. Может , оно всё так, но тут есть одно "но" - как форма теперь будет ловить сообщения контролов, которые не её (формы) дети ? И, действительно, проект прикрепи уже! Так будет быстрее и проще для всех
|
|
|
Записан
|
|
|
|
Sosiskin
Интересующийся
Offline
|
|
« Ответ #8 : 19-08-2010 09:34 » |
|
Вот проэкт
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 19-08-2010 10:17 » |
|
ничего не могу понять - ты говоришь, что у тебя бокс пропадает, а у меня он нормально нарисован. Или я что-то не понял ))
Ещё, кстати, пропущен break после case WM_HOTKEY:
А ещё не нужно ругаться в комментариях (даже если очень хочется) - ведь их могут (и прочитают когда нибудь) начальник, клиент или ещё кто )
|
|
|
Записан
|
|
|
|
Sosiskin
Интересующийся
Offline
|
|
« Ответ #10 : 19-08-2010 10:32 » |
|
ничего не могу понять - ты говоришь, что у тебя бокс пропадает, а у меня он нормально нарисован. Или я что-то не понял ))
Там стоит параметр WS_BORDER, он просто рисует рамку. Если вместо него поставить BS_GROUPBOX то останутся только элементы, которые я в GroupBox помещаю. Да и рамка рисуется не так красиво как в GroupBox. Ещё, кстати, пропущен break после case WM_HOTKEY:
пасиб большое. А ещё не нужно ругаться в комментариях (даже если очень хочется) - ведь их могут (и прочитают когда нибудь) начальник, клиент или ещё кто )
вот тут извиняюсь. прост немного нервы не выдержали )) исправлюсь. В принципе с GroupBox могу забить. Ну не хочет, так не хочет. Другой вопрос появился. Какое сообщение передаёт UpDownControl процедуре обработки сообщений, при нажатии на его кнопки?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 19-08-2010 11:04 » |
|
Если вместо него поставить BS_GROUPBOX то останутся только элементы, которые я в GroupBox помещаю.
хм, не вижу такого. Как была рамка, так и остаётся. А, кстати, вот про это: И при создании новой кнопки я его и указываю в качестве Parent`a, а не главное окно. Всё хорошо двигается при указании координат для GroupBox`a. вот примерчик: ты прямо видел это сам ? Пример я не делал, забыл вчера вечером попробовать Просто у бокса средняя часть не рисуется - для того он и групбокс, чтоб через себя просвечивать )) Ещё, кстати, пропущен break после case WM_HOTKEY:
пасиб большое. А ещё не нужно ругаться в комментариях (даже если очень хочется) - ведь их могут (и прочитают когда нибудь) начальник, клиент или ещё кто )
вот тут извиняюсь. прост немного нервы не выдержали )) исправлюсь. В принципе с GroupBox могу забить. Ну не хочет, так не хочет. Какое сообщение передаёт UpDownControl процедуре обработки сообщений, при нажатии на его кнопки?
в пакете студии есть утилитка Spy++ (из меню в самой среде тоже можно запустить - Сервис->Spy++) выбираешь в ней окно (нажми большой бинокль и перетащи круглый "прицел") на окно-приёмник сообщений. Потом включи логгирование его сообщений (можно отфильтровать их, если надо)
|
|
|
Записан
|
|
|
|
Sosiskin
Интересующийся
Offline
|
|
« Ответ #12 : 19-08-2010 11:18 » |
|
Какое сообщение передаёт UpDownControl процедуре обработки сообщений, при нажатии на его кнопки?
в пакете студии есть утилитка Spy++ (из меню в самой среде тоже можно запустить - Сервис->Spy++) выбираешь в ней окно (нажми большой бинокль и перетащи круглый "прицел") на окно-приёмник сообщений. Потом включи логгирование его сообщений (можно отфильтровать их, если надо) Огромное спасибо, теперь стало намного легче отлавливать сообщения ))
|
|
|
Записан
|
|
|
|
Sosiskin
Интересующийся
Offline
|
|
« Ответ #13 : 19-08-2010 11:47 » |
|
Еще вопрос. Как получить ID от UpDownControl после того, как он отправил сообщение WM_VSCROLL процедуре обработки сообщений? case WM_VSCROLL: wmId = LOWORD(lParam); wmEvent = HIWORD(wParam); break;
В wmId лежит совсем не тот ID, который я указываю при создании UpDownControl.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #14 : 19-08-2010 14:38 » |
|
попробуй так
GetDlgCtrlID(хендл_контрола)
|
|
|
Записан
|
|
|
|
|