Wtl :)
Вкачестве литературы исользывался RSDN.ru и семплы ВТЛ (BMPView, MDIDocVw).
Есть ряд вопросов.
1. Почему в ВТЛовских семплах реализация методов находится внутри класса?
2. Где есть еще какая инфа?
1. Почему в ВТЛовских семплах реализация методов находится внутри класса?
Несколько правильных вариантов:
1) WTL построена на шаблонах, как известно шаблоны нельзя разносить по .h и .cpp файлам (современные компиляторы не поддерживают export).
Поэтому и по-аналогии и нешаблонные классы пишут так же с реализацией.
2) примеры вообще удобнее писать в таком порядке, определение + реализация.
Но мой совет: там, где реализацию и определение можно разнести, - разноси. Это и удобнее для просмотра кода и быстрее компилится.
Но, конечно, без фанатизма. Например гетеры и сетеры в большинстве случаев разносить на определение и реализацию не стоит.
2. Где есть еще какая инфа?
google.com :)
Ну и здесь на форуме ни раз приводились интересные ссылки.
#if (_WIN32_IE < 0x0300)
#error WTL requires IE version 3.0 or higher
#endif
хотя ИЕ у меня 6.
что можете посоветовать?
При компиляции получаю эррор
#if (_WIN32_IE < 0x0300)
#error WTL requires IE version 3.0 or higher
#endif
хотя ИЕ у меня 6.
что можете посоветовать?
А студия какая?
Попробуй отыскать место, где определяется макрос (я навскидку не помню), и поправить там.
Либо вообще задать прямо в главном заголовочном файле проекта (а-ля stdafx.h) этот макрос другим значением.
А студия какая?
Попробуй отыскать место, где определяется макрос (я навскидку не помню), и поправить там.
Либо вообще задать прямо в главном заголовочном файле проекта (а-ля stdafx.h) этот макрос другим значением.
А студия какая?
Попробуй отыскать место, где определяется макрос (я навскидку не помню), и поправить там.
Либо вообще задать прямо в главном заголовочном файле проекта (а-ля stdafx.h) этот макрос другим значением.
VC 6.0.
эрор находиться в atlapp.h (походу и в других АТЛовских *.h, есть такое условие).
На счет поправить вручную, тогда компилится.
Хотелось бы узнать откуда вообще берется значение версии ИЕ, и почему оно оибочно.
И еще, что меня сбило с толку и я даже подумал что этот глюк из-за того что я вручную еррор поправил - смотри аттач. Это файл с РСДН.ру демонстрирующий использывание карты масштабирования (полезнейшая вещь, столько гемороя пропадает). Так вот, у меня окошко не рсайзится. Или они криво написали, или ???
после нажатия операторов доступа к членам .,-> вылазил бы список с членами данного класса?
А то фигово как то изучать данную библиотеку каждый раз обращяясь за именем и описанием нужного члена класса в соответствующий хедер и дописывать ее вручную.
В качестве своего первого примера я использовал по умолчанию созданый дефолтный SDI проект. Там есть данный класс,и все компилится на ура,вот только эта неприятность отсутствие всплывающего списка огорчает.
PS: Использую WTL 7.5
На счет поправить вручную, тогда компилится.
Надеюсь, ты правил не файли WTL, а свои.
Хотелось бы узнать откуда вообще берется значение версии ИЕ, и почему оно оибочно.
Навскидку не помню, отвечу позднее.
И еще, что меня сбило с толку и я даже подумал что этот глюк из-за того что я вручную еррор поправил - смотри аттач. Это файл с РСДН.ру демонстрирующий использывание карты масштабирования (полезнейшая вещь, столько гемороя пропадает). Так вот, у меня окошко не рсайзится. Или они криво написали, или ???
Не вижу аттачмента.
Еще бы хотелось задать здесь вопрос касательно технологии MS VisualStudio 2002 (VC++ 7.0) IntelliSense. Как cделать так чтобы допустим после обявления класса CCommandBarCtrl m_CCmdBar;
после нажатия операторов доступа к членам .,-> вылазил бы список с членами данного класса?
А то фигово как то изучать данную библиотеку каждый раз обращяясь за именем и описанием нужного члена класса в соответствующий хедер и дописывать ее вручную.
В качестве своего первого примера я использовал по умолчанию созданый дефолтный SDI проект. Там есть данный класс,и все компилится на ура,вот только эта неприятность отсутствие всплывающего списка огорчает.
Думаю, Visual Assist тебе поможет.
Надеюсь, ты правил не файли WTL, а свои.
Не вижу аттачмента.
На счет правки файла, то я подправил АТЛовский (на время)
На счет аттача, то вот собственно файл http://www.rsdn.ru/article/wtl/wtl-2/WTLSizeDlg.zip
Что за Visual Assist? Можно поподробней. И как он поможет?
Все нашел.Действительно помогло.
На счет правки файла, то я подправил АТЛовский (на время)
Совсем-совсем неправильно.
Библиотечные файлы - это типа святое и непосягаемое. Хотя я их тоже иногда правлю, но это связано с фиксом библиотечных багов. Думаю, с этим ты ещё долго не столкнешся, т.к. они весьма специфичны.
В твоем случае лучше было вставить строчку
#define _WIN32_IE 0x0501
в файле StdAfx.h перед инклудом
#include <atlbase.h>
т.к. он в свою очередь тянет
#include <shlwapi.h>
а в нем есть запись:
#ifndef _WIN32_IE
#define _WIN32_IE 0x0501
видимо у тебя тут прописана др. версия.
На счет аттача, то вот собственно файл http://www.rsdn.ru/article/wtl/wtl-2/WTLSizeDlg.zip
Посмотрел. Всё банально... :)
У тебя диалог в ресурсах имеет бордер Dialog Frame, а надо Resizing, чтоб ресайзилось.
Блин, ребят? Он кажется OpenSource=))) Гы Класс...%)
Сегодня буду пытаться его с билдером скрестить.
Совсем-совсем неправильно.
Библиотечные файлы - это типа святое и непосягаемое. Хотя я их тоже иногда правлю, но это связано с фиксом библиотечных багов. Думаю, с этим ты ещё долго не столкнешся, т.к. они весьма специфичны.
В твоем случае лучше было вставить строчку
#define _WIN32_IE 0x0501
в файле StdAfx.h перед инклудом
#include <atlbase.h>
т.к. он в свою очередь тянет
#include <shlwapi.h>
а в нем есть запись:
#ifndef _WIN32_IE
#define _WIN32_IE 0x0501
видимо у тебя тут прописана др. версия.
Посмотрел. Всё банально... :)
У тебя диалог в ресурсах имеет бордер Dialog Frame, а надо Resizing, чтоб ресайзилось.
Немного с опозданием пишу.
Спасибо. На счет диалога, так я раньше никогда диалогу Resizing не ставил, ка-то небыло потребности, потому даже не мог предположить... сейчас все ок.
На счет #define _WIN32_IE 0x0501 .Если ставить 0x0501, то у меня вылазит еще 6 эррорров, зато все норм, елси ставить 0x0401
Есть класс окна:
class CMainWindow : public CWindowImpl<CMainWindow, CWindow, CFrameWinTraits>
{
BEGIN_MSG_MAP(CMainWindow)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
END_MSG_MAP()
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
PostQuitMessage(0);
return 0;
}
};
Все чудненько, Теперь я хочу, чтобы когда в меню кликают по пункту ID_EXIT, окно закрывалось. Вписываю следующее
class CMainWindow : public CWindowImpl<CMainWindow, CWindow, CFrameWinTraits>
{
BEGIN_MSG_MAP(CMainWindow)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
[COLOR=red]COMMAND_ID_HANDLER(ID_EXIT, OnExit)[/COLOR]
END_MSG_MAP()
[COLOR=red]
LRESULT OnExit(WORD, WORD, HWND hWnd, BOOL)
{
DestroyWindow(hWnd);
return 0;
}
[/COLOR]
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
PostQuitMessage(0);
return 0;
}
};
Получаю эррор 'DestroyWindow' : function does not take 1 parameters
Есть у меня простое окно с менюшкой.
Есть класс окна:
class CMainWindow : public CWindowImpl<CMainWindow, CWindow, CFrameWinTraits>
{
BEGIN_MSG_MAP(CMainWindow)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
END_MSG_MAP()
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
PostQuitMessage(0);
return 0;
}
};
Все чудненько, Теперь я хочу, чтобы когда в меню кликают по пункту ID_EXIT, окно закрывалось. Вписываю следующее
class CMainWindow : public CWindowImpl<CMainWindow, CWindow, CFrameWinTraits>
{
BEGIN_MSG_MAP(CMainWindow)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
[COLOR=red]COMMAND_ID_HANDLER(ID_EXIT, OnExit)[/COLOR]
END_MSG_MAP()
[COLOR=red]
LRESULT OnExit(WORD, WORD, HWND hWnd, BOOL)
{
DestroyWindow(hWnd);
return 0;
}
[/COLOR]
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
PostQuitMessage(0);
return 0;
}
};
Получаю эррор 'DestroyWindow' : function does not take 1 parameters
Ну так пиши либо так
::DestroyWindow(hWnd);//вызов winapi
или так:
DestroyWindow();//вызов метода базового класса для твоего класса