Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: как убрать меню в MFC приложении...  (Прочитано 18888 раз)
0 Пользователей и 1 Гость смотрят эту тему.
acc15
Гость
« : 22-10-2005 17:42 » 

собственно вопрос...
создаю проект MFC AppWizard... Он делает главное окно с меню... если убрать это меню из ресурсов, то пишется ошибка... как мне убрать это ненужное меню??? и вообще всё лишнее... акселераторы, about dialog, и прочую левоту???
Записан
Александр Цикин
Гость
« Ответ #1 : 23-10-2005 06:17 » 

В файле MainFrm.cpp в функции OnCreate происходит создание всей этой "левоты Улыбаюсь".
Смотри, что тебе не нужно, и не создавай (просто убей код создания).
Удачи Улыбаюсь
Записан
acc15
Гость
« Ответ #2 : 23-10-2005 13:29 » 

а вот неправда )))... ошибка происходит здесь
-----------------------------------------------------------------------------------------
   // Change the registry key under which our settings are stored.
   // TODO: You should modify this string to be something appropriate
   // such as the name of your company or organization.
   SetRegistryKey(_T("Local AppWizard-Generated Applications"));

   LoadStdProfileSettings(0);  // Load standard INI file options (including MRU)

   // Register the application's document templates.  Document templates
   //  serve as the connection between documents, frame windows and views.

   CSingleDocTemplate* pDocTemplate;
   pDocTemplate = new CSingleDocTemplate(
      IDR_MAINFRAME,
      RUNTIME_CLASS(CXwDoc),
      RUNTIME_CLASS(CMainFrame),       // main SDI frame window
      RUNTIME_CLASS(CXwView));
   AddDocTemplate(pDocTemplate);

   // Parse command line for standard shell commands, DDE, file open
   CCommandLineInfo cmdInfo;
   ParseCommandLine(cmdInfo);

   // Dispatch commands specified on the command line
   if (!ProcessShellCommand(cmdInfo))
      return FALSE;

-----------------------------------------------------------------------------------------
главный файл приложения...

а в OnCreate у MainFrame'а написано следующее

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
      return -1;

   return 0;
}

пробовал сделать так:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   lpCreateStruct->hMenu = 0;
                if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
      return -1;

   return 0;
}
не помогло... Да и вообще до OnCreate он не доходит... ошибка происходит до него... в конструкторе MainFram'a ничего не сделаешь...
« Последнее редактирование: 20-12-2007 21:09 от Алексей1153++ » Записан
Александр Цикин
Гость
« Ответ #3 : 23-10-2005 17:03 » 

А, милль пардон, именно меню так нельзя Жаль
А вылетает оно здесь:
Код:
BOOL CFrameWnd::Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
LPCTSTR lpszMenuName,
DWORD dwExStyle,
CCreateContext* pContext)
{
HMENU hMenu = NULL;
if (lpszMenuName != NULL)
{
// load in a menu that will get destroyed when window gets destroyed
HINSTANCE hInst = AfxFindResourceHandle(lpszMenuName, RT_MENU);
if ((hMenu =[glow=red,2,300] ::LoadMenu(hInst, lpszMenuName)) [/glow] == NULL)
{
TRACE(traceAppMsg, 0, "Warning: failed to load menu for CFrameWnd.\n");
PostNcDestroy();            // perhaps delete the C++ object
return FALSE;
}
}

m_strTitle = lpszWindowName;    // save title for later

if (!CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle,
rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top,
pParentWnd->GetSafeHwnd(), hMenu, (LPVOID)pContext))
{
TRACE(traceAppMsg, 0, "Warning: failed to create CFrameWnd.\n");
if (hMenu != NULL)
DestroyMenu(hMenu);
return FALSE;
}

return TRUE;
}
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 24-10-2005 05:37 » 

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
   cs.hMenu=0;//убрали меню

   cs.lpszName=m_CaptionText;
   cs.style = WS_OVERLAPPED | WS_CAPTION | WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
   if( !CFrameWnd::PreCreateWindow(cs) )return FALSE;

   return TRUE;
}
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 24-10-2005 05:41 » 

> акселераторы
 - просто удалить из дерева ресурсов в визарде

> about dialog
   - проще не задавать визарду при создании проекта.
 а теперь - ищешь имя класса (он описан в файле с классом theApp) диалога помощи и по смыслу удавляешь. На все ошибки укажет компилятор - подчистишь
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 24-10-2005 08:17 » 

acc15, Чёт я не пойму - что ты хочшь? Тебе нужна лепёшка, а ты делаешь пиццу, чтобы потом, выбросив всё "левое", получить лепёшку?
Есть определённая архитектура, есть специальные объекты, для решения определённых задач, если они тебе не подходят - возьми другие. Зачем природу насиловать?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 24-10-2005 08:52 » 

Джон , не , у меня так было поначалу - ещё не знаешь чего хошь, создаёшь лишнее. А потом надо убрать, не порушив сильно
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 24-10-2005 09:00 » 

ещё не знаешь чего хошь

Не, ну эт конечно аргумент Улыбаюсь
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 24-10-2005 09:11 » 

Отлично

ну ладно тебе, ты ж сам со мной мучился Улыбаюсь
Записан

acc15
Гость
« Ответ #10 : 24-10-2005 10:11 » 

Нет, уважаемые, вы меня не поняли.... мне надо иметь обычное окно, что-то вроде диалога только имеющее CView... я в MFC если честно баран )), (в ВинАпи шарю, но не помогает).. так что поправьте если шо не так...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 24-10-2005 10:57 » 

acc15 , тогда создавай проект на основе диалога

или - всё вышеназванное + надо скрыть тулбар  и строку состояния


а ещё проще - скажи, что хочешь сделать-то? Улыбаюсь
« Последнее редактирование: 24-10-2005 10:59 от Алексей1153 » Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #12 : 24-10-2005 14:31 » 

Ок, - (только вот долгов у меня всё больше и больше набирается Жаль )

Значица так - не вникая в оооочень глубокие подробности - простейшая рамка на MFC делатся так:

1. Создаеём АБСОЛЮТНО пустой проект Win32 exe  назовём его simple
2. Веключаем в опциях проекта  поддержку MFC - использовать статическую библиотеку
3. добавляем в него 1 файл например simple.cpp

Код:
#include "afxwin.h"

class CMainFrame : public CFrameWnd
{
public:
CMainFrame();
};

CMainFrame::CMainFrame()
{
Create(NULL,"Simple1",WS_OVERLAPPEDWINDOW,rectDefault,NULL,NULL);
}

class CSimpleApp : public CWinApp
{
public:
CSimpleApp();
virtual BOOL InitInstance();
};

CSimpleApp::CSimpleApp(){}

BOOL CSimpleApp::InitInstance()
{
m_pMainWnd=new CMainFrame();
ASSERT(m_pMainWnd);
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
};

CSimpleApp theApp;

Всё.

Теперь про View - это неизменный объект Doc/View архитектуры с кучей функций. Предназначен для отображения данных объекта CDocument. И тд и тп

Если необходимо просто использовать ф-ю OnPaint то лучше взять простое окно CWnd - дочернее в CMainFrame. Пример - завтра.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
acc15
Гость
« Ответ #13 : 26-10-2005 22:08 » 

всё... разобрался... thx всем, чьи посты имеются в данной теме, в частности Джону...
Цитата
а ещё проще - скажи, что хочешь сделать-то?
надо было сделать.... а я уже сделал... ))) если хочешь глянуть могу выслать... только там платка одна нужна... и драйверок под неё... без этого просто тупое бесполезное окно...
кстати нету опции статической линковки MFC, как вылечить?
« Последнее редактирование: 26-10-2005 22:13 от acc15 » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #14 : 27-10-2005 09:05 » 

если хочешь глянуть могу выслать...

Глянул бы с удовольствием, да только времени мало - если считаешь, что есть чему и другим поучиться - можешь прям здесь выложить - прицепи к посту. Вообще-то у нас так принято - решение проблемы выкладывать - особенно если сам допёр. Тогда другие могут это тоже прочитать.

Цитата
кстати нету опции статической линковки MFC, как вылечить?

Хм странно... Вот скриншоты для 6ой (она у меня правда немецкая) и .NET 2003


* VS6.gif (13.54 Кб - загружено 1023 раз.)
* dotNET2003.gif (11.7 Кб - загружено 1000 раз.)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #15 : 27-10-2005 09:28 » 

в ВинАпи шарю, но не помогает).. так что поправьте если шо не так...

не знаю, апи - это как раз всегда поможет, только дольше, МФСя надстройка....

Так что - .... странно как - то...

Рзобрался и класненько Улыбаюсь
Записан

А птичку нашу прошу не обижать!!!
acc15
Гость
« Ответ #16 : 27-10-2005 12:26 » new

Цитата
Хм странно... Вот скриншоты для 6ой (она у меня правда немецкая) и .NET 2003

вот, вот... у меня там вот что... скрин свой прилепил...
а и ещё один оффтопный вопрос... где скачать MSDN полный... ??

* tmk.JPG (31.97 Кб - загружено 992 раз.)
« Последнее редактирование: 27-10-2005 12:33 от acc15 » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines