Приветствую всех! Нужно сделать в окне много-много (200+) кликабельных контролов в виде квадратов, чтоб при клике на оные - менять их цвет (что-то вреде редактора битмапа с зумом). Поскаджите как мне лучше зеализовать такую задачку, а главное как создать контролы и обрабатывать клики на них (MASM/RADASM).
делаешь owner-draw button и обрабатываешь WM_DRAWITEM , чтобы отрисовать. вот небольшой пример - в диалоговом окне я делал небольшую красную кнопку, вот код для отрисовки: Код (Text): case WM_DRAWITEM: if( wParam == IDC_REDBUTTON ) { static bool status=false; LPDRAWITEMSTRUCT pdis = (LPDRAWITEMSTRUCT)lParam; COLORREF color; if( pdis->itemAction==ODA_SELECT ) { status = !status; } color = status?RGB(0,0,0):RGB(255,0,0); HBRUSH hbr = CreateSolidBrush( color ); FillRect(pdis->hDC, &pdis->rcItem, hbr); DeleteObject(hbr); } break; таким образом выходит красная кнопка, которая при клике на ней становится черной. клик обрабатывается как обычно WM_COMMAND'ом.
ATX т.е. если твой битмап будет иметь разрешение 800х600, ты будешь создавать 480 тыс. кнопок? Тут нужно делать один контрол, отслеживать, куда в нем щелкнул пользователь и в том месте рисовать точку (прямоугольник при зуме).
rmn Пример с редактором битмэпа - только пример, реально контролов будет 200-300. Посему годится и варинт с кнопками.
Great Все супер, тока я на С не очень :-( Если можно тоже самое на MASMе!? + как мне лучше создавать сами кнопки (желательно чтобы они не имели эфекта нажатия)? Т.е. мне нужно получить что-то вроде такой картинки....
Хватит и окна без контролов: На рисунке - сетка 7*24=168 квадратов => хватит 7*24 битов => 24 байтов памяти. Задаются начальные байты. Задаются две кисти. По WM_LBUTTONDOWN: если курсор в одном из квадратов => инверсия соотвествующего бита. По WM_PAINT: пробежка по квадратам (двойной .while) и FillRect каждому, кисть зависит от состояния бита. Если все-таки контрол: static (1 штука) с SS_NOTIFY, вместо WM_LBUTTONDOWN - WM_COMMAND.
Сделал кнопки в цикле ф-цией CreateWindowEx со стилем BS_OWNERDRAW и покрасил их - порядок. Теперь немогу понять как мне узнать в какой цвет окрашена какждая кнопка (при каждом нажатии на кнопку она должна менять цвет, соответственно нужно определять текущий цвет)?