powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / VC++.NET
3 сообщений из 3, страница 1 из 1
VC++.NET
    #32861925
DenDer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
Я еще новичек в VC++.Net, но постепенно пытаюсь разобраться.
Вот наткнулся на ситуацию.
Суть:
Начал с нуля "Win32 App" - установил галочку "Empty". Создал все как полагается: CMainFrame, CMyView, .... (по плану - как написано).

Также создал для одного CMyDoc два представления CMyView и CNewView. Создал сепаратор
Код: plaintext
1.
CSplitterWnd m_wndSplitter;

а потом между этим разделителем впихнул два представления одного документа
Код: plaintext
1.
2.
3.
4.
5.
6.
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext *pContext){
	ASSERT(m_wndSplitter.CreateStatic(this, 2 , 1 )); 
	ASSERT(m_wndSplitter.CreateView( 0 , 0 ,RUNTIME_CLASS(CMyView),CSize( 320 , 250 ),pContext));
          ASSERT(m_wndSplitter.CreateView( 1 , 0 ,RUNTIME_CLASS(CNewView),CSize( 100 , 50 ),pContext));
	return TRUE;
}

Работает, но только если я копмилю в "Debug"-моде. Получается простенькое окошко (поделенное почти пополам - один вид со своим набором событий, а другой - со своим) - как раз то, что я хотел.

А вот если скомпилить проект в режиме "Release" - нифига - окно загружается, но без 2-х "видов" и разделителя между ними - только один MainFrame.
Может мне кто-нибудь обьяснить почему? Может я чего-то не знаю? Я знаю, что компилятор в режимах Debug/Release работает по-разному, но не до такой же степени.
...
Рейтинг: 0 / 0
VC++.NET
    #32862799
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DenDer
Может мне кто-нибудь обьяснить почему? Может я чего-то не знаю? Я знаю, что компилятор в режимах Debug/Release работает по-разному, но не до такой же степени.


А ты знаешь, ЧТО КОНКРЕТНО работает по-разному ?
Так вот, макро-функция ASSERT определена примерно так :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#ifdef _DEBUG

  #define ASSERT(f) \
	do \
	{ \
	if (!(f) && AfxAssertFailedLine(THIS_FILE, __LINE__)) \
		AfxDebugBreak(); \
	} while ( 0 ) \

#else   // _DEBUG

  #define ASSERT(f)          ((void) 0 )

#endif


Вряд ли в Release-сборке у тебя определена макро _DEBUG.
Теперь понял, куда твои
m_wndSplitter.CreateStatic(this,2,1));
деваются ? И копмилятор здесь совсем ни при чем.

А кстати, то, что ты хотел, называется не ASSERT, а VERIFY - она в Release оставляет проверяемое выражение, выбрасывая только выдачу сообщения о ошибке и переход в отладчик. Но тупая замена ASSERT на VERIFY сильно лучше твою функцию не сделает, если в конце ее стоит тупое
Код: plaintext
1.
return TRUE;
...
Рейтинг: 0 / 0
VC++.NET
    #32863801
DenDer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно........
Спасибо, учту...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / VC++.NET
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]