Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Создание меню- как соединить с проектом?


Автор: Лёша 6.11.2002, 21:42
Привет!
Хочу сделать меню в программе ( BorlandC 5)
Делаю так
1. Становлюсь Project Manager на файл .rc -> 2 раза клик->открывается окно
2. В окне правой кнопкой мышки ->  New Resource->MENU название "MENU"
3. Дальше составляю его каким нужно

Как теперь мне его вставить в прогу, т.к. почему-то после Building и Run
его не видно, пустое окно ....



#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
#pragma argsused
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   PSTR szCmdLine, int iCmdShow)
    {
    static char szAppName[] = "Пример" ;
    HWND        hwnd ;
    MSG         msg ;
    WNDCLASSEX  wndclass ;
     HMENU hMenu;
    wndclass.cbSize        = sizeof (wndclass) ;
    wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc   = WndProc ;
    wndclass.cbClsExtra    = 0 ;
    wndclass.cbWndExtra    = 0 ;
    wndclass.hInstance     = hInstance ;
    wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ; // &#200;&#234;&#238;&#237;&#234;&#224;
    wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ; //&#202;&#243;&#240;&#241;&#238;&#240;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName  = "MENU";
    wndclass.lpszClassName = szAppName ;
    wndclass.hIconSm       = LoadIcon (NULL, IDI_APPLICATION) ;

    RegisterClassEx (&wndclass) ;

       hwnd = CreateWindow (szAppName,
    "Пример",  
                  WS_OVERLAPPEDWINDOW,      
                  CW_USEDEFAULT,  
                  CW_USEDEFAULT,            
                  CW_USEDEFAULT,            
                  CW_USEDEFAULT,            
                  NULL,                    
                  NULL,  
                  hInstance,
  NULL) ;    

    ShowWindow (hwnd, iCmdShow) ;
    UpdateWindow (hwnd) ;

    while (GetMessage (&msg, NULL, 0, 0))
         {
         TranslateMessage (&msg) ;
         DispatchMessage (&msg) ;
         }
    return msg.wParam ;
    }

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
    HDC         hdc ;
    PAINTSTRUCT ps ;
    RECT        rect ;

    switch (iMsg)
         {

         case WM_PAINT :
      hdc = BeginPaint (hwnd, &ps) ;

              GetClientRect (hwnd, &rect) ;

              DrawText (hdc, "что-то написано ", -1, &rect,
                      DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

      EndPaint (hwnd, &ps) ;
              return 0 ;

         case WM_DESTROY :
              PostQuitMessage (0) ;
              return 0 ;
         }
    return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
        }


Вот текст меню


produced by Borland Resource Workshop


*****************************************************************************/

#define IDM_MENU1 1

IDM_MENU1 MENU
{
POPUP "&МЕНЮ"
{
 MENUITEM "&Text1", 101
 MENUITEM "&Text2", 104
 MENUITEM SEPARATOR
 MENUITEM SEPARATOR
 MENUITEM "&Exit", 108
}

POPUP "Help"
{
 MENUITEM SEPARATOR
 MENUITEM "О программе", 903
}

}



Буду очень благодарен за ответ!
До свидания.

Автор: Klin 6.11.2002, 22:08
Так тебе  просто нужно создать обыкновенное меню?

Автор: Finder Adventuries 7.11.2002, 15:56
Klin , я уже ответил Лёше на вопрос (у него была просто ошибка в строке
wndclass.lpszMenuName  = "MENU") Сейчас меню появилось, всё нормально ;
а как теперь сделать , чтобы  после выбора конкретного подпункта меню
вызывался , к примеру MessageBox?

Автор: Klin 7.11.2002, 18:37
С чем именно, с какими кнопками?

Автор: Лёша 7.11.2002, 19:28
1) когда выб. пункт меню "Text1 "
должно появл-ся
MessageBox(0, "RERAD", "Text", MB_OK | MB_ICONEXCLAMATION);

2) когда выб. пункт меню "О программе"  -
MessageBox(0, "RERAD", "Copyright Ivanov ", MB_OK | MB_ICONEXCLAMATION);

не знаю как сделать :-(
Помогите пожалуйста!

Автор: Klin 8.11.2002, 04:28
Зачем MessageBox? Можно, чтобы форма появилась, а в ней содержимое!
Цитата
не знаю как сделать

Что именно?

Автор: Лёша 8.11.2002, 20:40
Уже сделал (см. ниже) теперь на выбор пунктов меню реагирует нормально (кстати MessageBox мне нужен был только чтоб выяснить как это работает)
Да, Klin, на самом деле мне нужно выводить в это же окно отрывок текста,
но пока не могу :-((
может подскажете  как это сделать ?



LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
    HDC         hdc ;
    PAINTSTRUCT ps ;
    RECT        rect ;

switch(wParam) //
{

case 101:// text1
//MessageBox(0, "RERAD", "Lab1", MB_OK | MB_ICONEXCLAMATION); // <-Здесь
// бы текст выводить ...???
//    Функция  DrawText (hdc, "..... ", -1, &rect,
//                      DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
// почему-то не выводится ....??

break;

Автор: Klin 8.11.2002, 22:31
Цитата(Guest @ 08.11.2002, 12:40)
...мне нужно выводить в это же окно отрывок текста...

Куда именно?

Автор: Лёша 9.11.2002, 00:40
Куда выводить - всё равно, (можно в центр создаваемого окна)...

Автор: Klin 9.11.2002, 01:11
Нет, я имею ввиду во что?

Автор: Finder Adventuries 9.11.2002, 21:57
В
DrawText (hdc, "ТЕКСТ.... ", -1, &rect,
                     DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

Автор: Klin 10.11.2002, 03:51
Слушай кинь мне на мыло этот проект, я с ним разберусь.
klin-2002@narod.ru

Автор: Finder Adventuries 10.11.2002, 05:49
Klin , я послал , но почта вернулась с сообщением
Remote host said: 550 5.7.1 Policy analysis reported: Spam source. Nonexistent administrators email (XELENA) (2002/10/29) rcpt=<klin-2002@narod.ru>

я сделал тему , про TextOut , может это поможет ...

Автор: Klin 10.11.2002, 18:55
Понятно, разберусь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)