Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2009, 19:23   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию переход с билдера на визуал

Добрый вечер! Перехожу с билдера на Визуал с++. тяжко, всё подругому.
Создал приложение MFC (работаю по книге)Татьяны Сидориной.
Вот только непонятно, зачем надо в MainForm.cpp и ChildView писать одно и то же: cs.lpszClass=AfxRegisterWndClass(NU LL, LoadCursor(NULL, IDC_WAIT),reinterpret_cast<HBRUSH>( COLOR_ACTIVEBOR DER+1),LoadIcon(NULL, IDI_ERROR));
также: NULL - это нуль, но что он делает в функциях? когда мы его используем, параметр принимает стандартное значение или как?
что делает reinterpret_cast<HBRUSH>(COLOR_ACTI VEBORDER+1)?
и что зав оператор в
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
кое-какие недостатки в программе, которые немного не так работают как надо.
1. у меня иконка стандартная и не меняется на IDI_ERROR. Уже не знаю что делать.
И так в MainForm делал в BOOL CMainFrame::PreCreateWindow(CREATES TRUCT& cs)
cs.lpszClass=AfxRegisterWndClass(NU LL, LoadCursor(NULL, IDC_WAIT),reinterpret_cast<HBRUSH>( COLOR_ACTIVEBOR DER+1),LoadIcon(NULL, IDI_ERROR));
и так:
AfxGetApp()->LoadStandardIcon(IDI_ERROR);
а результат один и тот же. стоит иконка по умолчанию.
это первое.
2. когда создаётся приложение, в области Frame появляются песочные часы, как это и положено. я ведь написал
cs.lpszClass=AfxRegisterWndClass(NU LL, LoadCursor(NULL, IDC_WAIT),reinterpret_cast<HBRUSH>( COLOR_ACTIVEBOR DER+1),LoadIcon(NULL, IDI_ERROR));
но как только я мышку смещу в какую-то другую область, например выведу за границы приложения (а она там принимает стандартный указатель), вернув её в Frame я уже не получаю снова тех самых песочных часов.
но с View происходит всё так как надо. завёл мышь в эту область, она стала IDC_HAND, убрал в другое место и вернул в View - она всё IDC_HAND.
непонятно. в одном месте работает нормально, а в другом некорректно
P.S.при создании окна View , как написано в книжке, в функции Сreate() вместо AFX_IDW_PANE_FIRST я ввёл несуществующий индефикатор, чтобы размеры окна не задавались по умолчанию. в результате этого у меня это окошко "как бы не видимым стало". то есть при его создании на него накладывался тот фон, который находился за ним. но! если мы будем перемещать это окошко, то фон не изменится.
Пожалуйста, разъясните мне мои вопросы, очень прошу.
theApp.LoadStandardCursor(MAKEINTRE SOURCE(IDC_WAIT ));
даже6 так я сделал в CildView.cpp
ничё не помогает исправить косяк с указателем мыши
Dimarik вне форума Ответить с цитированием
Старый 05.10.2009, 20:41   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

вот так иконку можно задать

Код:
class APP: public CWinApp { ... }

BOOL APP::InitInstance()
{
	CWinApp::InitInstance();

	m_pMainWnd=new Frame();   // class Frame: public CFrameWnd {...}

	HICON hIcon=LoadIcon(L"main");
	m_pMainWnd->SetIcon(hIcon,0);

	m_pMainWnd->ShowWindow(m_nCmdShow);
	m_pMainWnd->UpdateWindow();
	return true;
}
Цитата:
что делает reinterpret_cast<HBRUSH>(COLOR_ACTI VEBORDER+1)
http://base.vingrad.ru/view/1852-sta...interpret_cast


что ты там остальное написал совсем непонятно
counter вне форума Ответить с цитированием
Старый 05.10.2009, 21:47   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Dimarik Посмотреть сообщение
зачем надо в MainForm.cpp и ChildView писать одно и то же: cs.lpszClass=AfxRegisterWndClass(NU LL, LoadCursor(NULL, IDC_WAIT),reinterpret_cast<HBRUSH>( COLOR_ACTIVEBOR DER+1),LoadIcon(NULL, IDI_ERROR));
AfxRegisterWndClass - регистрируется оконный класс.
Особенности WinAPI и продолжение традиций в MFC
MainForm - это окно с заголовком, а View - это тоже окно, которое лежит на MainForm, но оно уже соответственно без заголовка. От MainForm в Single Document кроме заголовка и рамочки, больше ничего и не видно. Ну еще менюшка с панельками, если имеются. В общем окна разные, а потому надо их всех регистрировать.
Цитата:
Сообщение от Dimarik Посмотреть сообщение
также: NULL - это нуль, но что он делает в функциях? когда мы его используем, параметр принимает стандартное значение или как?
Первый NULL - стиль окна. Указывает, что используется стиль по умолчанию. Можно же указывать всякие: CS_HREDRAW|CS_VREDRAW и т.п.
LoadCursor(NULL, IDC_WAIT) и LoadIcon(NULL, IDI_ERROR). Первый параметр указывает из какого модуля загружаются курсор и иконка. NULL показывает, что загружаются стандартные "картинки".
Цитата:
Сообщение от Dimarik Посмотреть сообщение
что делает reinterpret_cast<HBRUSH>(COLOR_ACTI VEBORDER+1)?
Опять же особенности GDI. Стандартную кисть тут просто используем. reinterpret_cast тупо приводит один тип к другому без каких-либо проверок корректности этого предположения. Скажешь ему, что "парам пам пам" - это int, он и будет свято в это верить
Цитата:
Сообщение от Dimarik Посмотреть сообщение
и что зав оператор в
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
Этот оператор, кажись, побитовое отрицание, т.е. обращает все биты на противоположные. Стиль так исключается, т.е. в данном случае рамочки не будет, на сколько я помню MFC
С остальным я не сталкивался, а потому помочь нечем
pu4koff вне форума Ответить с цитированием
Старый 06.10.2009, 09:12   #4
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

http://slil.ru/28047455
вот это я пытаюсь сделать
Dimarik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переход с Билдера на MS VISUAL Dimarik Visual C++ 1 22.12.2009 01:37
Помогите пажалста!!Визуал бэсик Тёмный_Тэ Фриланс 1 09.06.2007 08:28