Как получить доступ к свойствам контролов и форм?
Если можно, покажите пример с диалоговым окном: изменение размеров окна и что-нибудь с каким-либо контролом (например, как свойство Caption изменить).
Заранее благодарен.
Необходимо во время работы программы изменять свойства котролов и форм (например размер). В басике все очень легко делается. А в VC++ даже не знаю где копать.
Если можно, покажите пример с диалоговым окном: изменение размеров окна и что-нибудь с каким-либо контролом (например, как свойство Caption изменить).
Заранее благодарен.
Допустим, у тебя есть на диалоге кнопка с идентификатором IDC_BUTTON1. чтобы поменять у нее Caption сделай в программе так:
CWnd* pWnd = GetDlgItem(IDC_BUTTON1);
pWnd->SetWindowText("New Caption");
Допустим, у тебя есть на диалоге кнопка с идентификатором IDC_BUTTON1. чтобы поменять у нее Caption сделай в программе так:
CWnd* pWnd = GetDlgItem(IDC_BUTTON1);
pWnd->SetWindowText("New Caption");
SetWindowText - это ведь функция?
И много таких функций? На каждое свойство?
Можно ли где-то еще кроме MSDN получить такую информацию (своей нет, а Сети сидеть и разбираться со всем этим накладно получится, да и времени нет)?
И последний вопрос. Как размеры то менять? У форм.
SetWindowText - это ведь функция?
И много таких функций? На каждое свойство?
Эти функции являются врапперами (обертками) посылки соотв. сообщений окну. Эти же функции используются и бейсиком, только оборачиваются поверх своим враппером так, что кажуться обычными свойствами, полями классов. Так же можно сделать и в VC++, т.е. привести к виду
Win.Caption = "CaptionText";
Win.SizeX = 35;
и т.д.
Но это не очень наглядно, поэтому и не применяется обычно. Короче, дело вкуса.
И последний вопрос. Как размеры то менять? У форм.
См. SetWindowPos
См. SetWindowPos
Вобщем, взял я свой командер и стал шарить по папкам в поисках SetWindowPos. И нашел. В файлике Winuser.h такую штуку:
BOOL
WINAPI
SetWindowPos(
HWND hWnd,
HWND hWndInsertAfter ,
int X,
int Y,
int cx,
int cy,
UINT uFlags);
Попробовал. Не получилось. По крайней мере внешних проявлений никаких.
На HWND hWndInsertAfter VC++ заругался, когда я подставил туда тоже что и в hWnd (просто от незнания). Говорит, немогу convert parameter 2 from 'class CWnd *' to 'int' :-?. Может я что не так делаю? (В чем разница между CWnd и HWND?)
И снова вопросы.
Что такое HWND hWndInsertAfter?
И что такое UINT uFlags?
http://firststeps.ru/mfc/steps/help/r.php?120
Пример использования:
http://firststeps.ru/mfc/steps/r.php?4
HWND - указатель (DWORD) на класс окна (иными словами - дескриптор окна), который получается при вызове API-функции CreateWindowEx. CWnd* - указатель на объект класса CWnd (что это - читай литературу или, на крайний случай MSDN). Через этот указатель можно получить HWND данного окна, обратясь к переменной m_hWnd, класса CWnd.
P.S. Лучше все таки приобрести книжку, иначе учиться будет очень и очень трудно.
Видимо ты используешь MFC классы. Тогда тебе больше подойдет функция MoveWindow.
Не, SetWindowPos подошла.
Оказывается ClassWizard предложил мне создать новый класс, т.к. там, по его мнению, его не хватало. Вот я и создал класс, над которым и производил все измения. Потому и результата "не было".
Ха! Книжку. Лежит у меня одна умная книжка: Дэвид Дж. Круглински, Скотт Уингоу, Джордж Шеферд "Программирование на Microsoft Visual C++ 6.0" Пер. с англ. Питер. Толстая такая, с диском! Но тама такого нету. Лишь скромное упоминание о структуре LPRECT (понадобилась она мне чтоб оригинальные размеры сохранить), объявление которой я не нашел ни в одном из "заголовочных" файлов (маска поиска: *.*) в каталоге Visual Studio.
По поводу MSDN повторюсь - нету ее у меня :( Так и быть, попробую в онлайне посмотреть.
Но я уже сам почти во всем разобрался. Хотя вопросы остались.
Спасибо всем.