Шаг 186 - Доступ к элементам управления в диалоговом окне

 ----- Original Message ----- 
From: Trionon, Kharkov 
To: kaev@yandex.ru
Sent: Saturday, May 06, 2000 2:37 AM
Subject: MFCByStep

Я предпочитаю везде использовать диалоги и никогда не 
создавать окон с помощью CreateWindow... 

Вот тут я узнал один интересный логический ход при работе с диалоговыми окнами, и думаю с Вами им нужно поделиться. Отчасти к небольшому развитию этой темы меня подвело и это письмо выше. Спасибо за мысль. И так задача в том можно ли как-нибудь еще кроме как через DDX и класс элемента получить доступ к элементу на диалоговом окне. Можно имея идентифкатор элемента.

Все элементы управления являются потомками CWnd и можно очень просто построить этот класс имея идентифкатор элемента. Вот так с помошью GetDlgItem.

CWnd* pWnd = GetDlgItem(IDC_....);

Дальше мы можем использовать функции CWnd

pWnd->GetWindowRect(...);

Несмотря на всю простоту этого примера он кроет огромный потенциал для автоматизации. Все элементы диалогового окна являются потомками от CWnd, в нем находится огромное количество параметров окна, в том числе и местоположение, размер и так далее. Вот. Используя это свойство Вы сможете проводить изменение положения или размера или еще чего-то сразу со всеми элементами диалогового окна вне зависимости от их типа только на основе идентификатора ресурса.

3. Ваш пример по вышеуказанному адресу с сохранением функциональности
мог бы занимать значительно меньше - практически это мог бы быть 
единственный вызов DialogBox() + функция диалога Конечно в этом случае
он бы потерял свойство "учебности", но если бы все вместе  с "классическим"
примером, демонстрирующим СТРУКТУРУ и ИДЕОЛОГИЮ Win32 публиковали бы 
"короткий", сколько людей было бы наставлено на путь истинный!

Действительно самый короткий пример с использованием MFC вот такой. Делаем проект Win 32 Application. Ставим в настройках USE MFC далее код.

#include "stdafx.h"
#include "afxwin.h"

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 	AfxMessageBox("Hello Word");
	return 0;
}

Только надо в stdafx.win отключить #include

......
#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
//#include <windows.h>
// TODO: reference additional headers your program requires here
......

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 14.05.2000