Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Артём121
63 / 63 / 1
Регистрация: 15.11.2010
Сообщений: 393
Записей в блоге: 1
#1

Win32 API, LRESULT CALLBACK, ошибки - C++

09.07.2012, 18:32. Просмотров 1520. Ответов 4
Метки нет (Все метки)

Помогите исправить ошибки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include<windows.h>
#include<commctrl.h>
const IDM_Enable_Disable=0;
const IDM_Exit=1;
const IDM_About=2;
const IDP_File=3;
const IDP_Help=4;
 
char* pMessages[]=
  {
  "Enable or disable exit",
  "Exit from program",
  "About this program",
  "File operation",
  "Help operation",
  "Menu example",
  "System menu"
  };
 
  LRESULT CALLBACK MenuDemoWndProc(HWND,UINT,UINT,LONG);
 
  HWND hStatusWindow;
  UINT wId;
  HMENU hMenu,hFileMenu,hHelpMenu;
  HINSTANCE hInst;
 
  int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                         LPSTR IpszCmdParam,int nCmdShow)
 
    {
     HWND hWnd;
     WNDCLASS WndClass;
     MSG Msg;
 
     hInst=hInstance;
     /*Registering out window class*/
     /*File WNDCLASS structure*/
     WndClass.style=CS_HREDRAW | CS_VREDRAW;
     WndClass.lpfnWndProc =(WNDPROC)MenuDemoWndProc;
     WndClass.cbClsExtra=0;
     WndClass.cbWndExtra=0;
     WndClass.hInstance=hInstance;
     WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
     WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
     WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
     WndClass.lpszMenuName=NULL;
     WndClass.lpszClassName="MenuExample";
 
     if(!RegisterClass(&WndClass))
       {
        MessageBox(NULL,"Cannot register class","Error",MB_OK);
        return 0;
       }
 
     hWnd=CreateWindow("MenuExample","Program No 2",
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        NULL,NULL,
                        hInstance,NULL);
     if(!hWnd)
       {
        MessageBox(NULL,"Cannot create window","Error",MB_OK);
        return 0;
       }
     InitCommonControls();
     hStatusWindow=CreateStatusWindow(WS_CHILD | WS_VISIBLE,
                                      "Menu sample",hWnd,wId);
     if(!hStatusWindow)
       {
        MessageBox(NULL,"Cannot create status window","Error",MB_OK);
        return 0;
       }
 
     /*Try to create menu*/
       AppendMenu((hFileMenu=CreatePopupMenu()),MF_ENABLED,MF_STRING,
                   IDM_Enable_Disable,"&Enable exit");
       AppendMenu(hFileMenu,MF_GRAYED | MF_STRING,IDM_Exit,"E&xit");
       AppendMenu(hHelpMenu=CreatePopupMenu()),MF_DISABLED , MF_STRING,
                  IDM_About,"A&bout");
       hMenu=CreateMenu();
       AppendMenu(hMenu,MF_ENABLED | MF_POPUP,(UINT)hFileMenu,
                  "&File");
       AppendMenu(hMenu,MF_ENABLED | MF_POPUP,(UINT)hFileMenu,
                  "&Help");
       SetMenu(hWnd,hMenu);
       /*Show our window*/
       ShowWindow(hWnd,hCmdShow);
       UpdateWindow(hWnd);
       DrawMenuBar(hWnd);
 
       /*Beginning of message cycle*/
       while(GetMessage(&Msg,NULL,0,0))
       {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
       }
       return Msg.wParam;
     }
 
     LRESULT CALLBACK MenuDemoWndProc(HWND hWnd,UINT Message,
                                       UINT wParam,LONG IParam)
     {
      RECT Rect;
      static UINT nFlag=MF_ENABLED;
      char* pContent[]=
        {
         "Enable exit",
         "Disable exit"
        };
      static UINT nIndex=0;
      static HBITMAP hBitmap;
      int nDimension;
 
      switch(Message)
        {
         case WM_CREATE:
              hDimension=GetSystemMetrics(SM_CYMENU);
              hBitmap=LoadImage(hInst,"msdogs.bmp",IMAGE_BITMAP,
                                nDimension*2,nDimension,LR_LOADFROMFILE);
              AppendMenu(GetMenu(hWnd),MF_BITMAP,IDM_Bitmap,hBitmap);
              break;
         case WM_COMMAND:
           switch(wParam)
             {
              case IDM_Enable_Disable:
                EnableMenuItem(hFileMenu,IDM_Exit,MF_BYCOMMAND | nFlag);
                nFlag=(nFlag==MF_ENABLED)? MF_GRAYED:MF_ENABLED;
                nIndex=(nIndex==0)?1:0;
                ModifyMenu(hFileMenu,IDM_Enable_Disable,MF_BYCOMMAND |
                           MF_STRING,IDM_Enable_Disable,pContent[nIndex]);
                break;
              }
         case WM_SIZE:
           SendMessage(hStatusWindow,WM_SIZE,wParam,IParam);
           GetClientRect(hWnd,&Rect);
           return 0;
         case WM_MENUSELECT:
         //Selection is losted
           if ((UINT) HIWORD(wParam)==0xffff)&((HMENU)IParam==0))
             {
              SendMessage(hStatusWindow,SB_SETTEXT,(WPARAM) 0,
                          (LPARAM)nMessages[5]);
              return 0;
             }
           if ((UINT)HIWORD(wParam)&MF_SYSMENU)
             {
              SendMessage(hStatusWindow,SB_SETTEXT,(WPARAM)0,
                            (LPARAM)pMessage[6]);
              return 0;
             }
          if ((UINT)HIWORD(wParam)&MF_POPUP)
             {
              SendMessage(hStatusWindow,SB_SETTEXT,(WPARAM)0,
                            (LPARAM)pMessage[3+LOWORD(wParam)]);
              return 0;
             }
          SendMessage(hStatusWindow,SB_SETTEXT,(WPARAM)0,(LPARAM)
                      pMessages[LOWORD(wParam)]);
          return 0;
         case WM_DESTROY:
           DeleteObject(hBitmap);
           PostQuitMessage(0);
           return 0;
 
         }
         return DefWindowProc(hWnd,Message,wParam,IParam);
        }
Ошибки
C++
1
2
3
4
5
6
7
8
9
10
[C++ Error] Unit1.cpp(79): E2227 Extra parameter in call to __stdcall AppendMenuA(void *,unsigned int,unsigned int,const char *)
[C++ Error] Unit1.cpp(81): E2193 Too few parameters in call to '__stdcall AppendMenuA(void *,unsigned int,unsigned int,const char *)'
[C++ Error] Unit1.cpp(82): E2379 Statement missing ;
[C++ Error] Unit1.cpp(90): E2451 Undefined symbol 'hCmdShow'
[C++ Error] Unit1.cpp(120): E2451 Undefined symbol 'hDimension'
[C++ Error] Unit1.cpp(123): E2451 Undefined symbol 'IDM_Bitmap'
[C++ Error] Unit1.cpp(123): E2034 Cannot convert 'void *' to 'const char *'
[C++ Error] Unit1.cpp(123): E2342 Type mismatch in parameter 'lpNewItem' (wanted 'const char *', got 'void *')
[C++ Error] Unit1.cpp(142): E2027 Must take address of a memory location
[C++ Error] Unit1.cpp(142): E2379 Statement missing ;
Делаю по учебнику.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2012, 18:32     Win32 API, LRESULT CALLBACK, ошибки
Посмотрите здесь:

С++ Win32 API - C++
Подскажите книгу с самым доступным объяснением по данной теме. Что-то в роде &quot;С++ за 21 день&quot; только по Win32. Для чайников так сказать......

Книжки Win32 API на с++ - C++
Доброго времени суток! Нам в универе на лабораторные работы задают задание, написать консольную програмку с использованием win32 api. И...

Исходники Win32 Api - C++
У кого есть свои или знаете где их взять прошу скиньте ссылку. Книг хороших куча, но нужен самый простой шаблон с прямоугольником, что бы я...

Макросы, win32 API - C++
Создал проект Win32 API. В файле resource.h есть макросы на кнопки управления, диалоговые окна, картинки и т.д. Сменил у некоторых...

mdi в win32 api - C++
mdi в win32 api Хочу для удобстава сделать мбди приложение, но пробовал по разному WS_CHILD ставил (для дочерний) а родителем...

Буфер обмена win32 api - C++
Доброе время суток. Подскажите пожалуйсто как пользоваться буфером обмена. Мне нужно копировать, вырезать, вставлять текст.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.07.2012, 18:55     Win32 API, LRESULT CALLBACK, ошибки #2
Цитата Сообщение от Артём121 Посмотреть сообщение
const IDM_Enable_Disable=0;
const IDM_Exit=1;
const IDM_About=2;
const IDP_File=3;
const IDP_Help=4;
Типы не заданы.

Цитата Сообщение от Артём121 Посмотреть сообщение
/*Try to create menu*/
AppendMenu((hFileMenu=CreatePopupMenu()),MF_ENABLED,MF_STRING,
IDM_Enable_Disable,"&Enable exit");
слишком много аргументов.

Цитата Сообщение от Артём121 Посмотреть сообщение
AppendMenu(hHelpMenu=CreatePopupMenu()),MF_DISABLED , MF_STRING,
IDM_About,"A&bout");
со скобками путаница.
hCmdShow
hDimension
IDM_Bitmap
не объявленны.
Артём121
63 / 63 / 1
Регистрация: 15.11.2010
Сообщений: 393
Записей в блоге: 1
09.07.2012, 20:06  [ТС]     Win32 API, LRESULT CALLBACK, ошибки #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include<windows.h>
#include<commctrl.h>
const IDM_Enable_Disable=0;
const IDM_Exit=1;
const IDM_About=2;
const IDP_File=3;
const IDP_Help=4;
 
char* pMessages[]=
  {
  "Enable or disable exit",
  "Exit from program",
  "About this program",
  "File operation",
  "Help operation",
  "Menu example",
  "System menu"
  };
 
  LRESULT CALLBACK MenuDemoWndProc(HWND,UINT,UINT,LONG);
 
  HWND hStatusWindow;
  UINT wId;
  HMENU hMenu,hFileMenu,hHelpMenu;
  HINSTANCE hInst;
 
  int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                         LPSTR IpszCmdParam,int nCmdShow)
 
    {
     HWND hWnd;
     WNDCLASS WndClass;
     MSG Msg;
 
     hInst=hInstance;
     /*Registering out window class*/
     /*File WNDCLASS structure*/
     WndClass.style=CS_HREDRAW | CS_VREDRAW;
     WndClass.lpfnWndProc =(WNDPROC)MenuDemoWndProc;
     WndClass.cbClsExtra=0;
     WndClass.cbWndExtra=0;
     WndClass.hInstance=hInstance;
     WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
     WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
     WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
     WndClass.lpszMenuName=NULL;
     WndClass.lpszClassName="MenuExample";
 
     if(!RegisterClass(&WndClass))
       {
        MessageBox(NULL,"Cannot register class","Error",MB_OK);
        return 0;
       }
 
     hWnd=CreateWindow("MenuExample","Program No 2",
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        NULL,NULL,
                        hInstance,NULL);
     if(!hWnd)
       {
        MessageBox(NULL,"Cannot create window","Error",MB_OK);
        return 0;
       }
     InitCommonControls();
     hStatusWindow=CreateStatusWindow(WS_CHILD | WS_VISIBLE,
                                      "Menu sample",hWnd,wId);
     if(!hStatusWindow)
       {
        MessageBox(NULL,"Cannot create status window","Error",MB_OK);
        return 0;
       }
 
     /*Try to create menu*/
       AppendMenu( hFileMenu=CreatePopupMenu(),MF_ENABLED|MF_STRING,IDM_Enable_Disable,"&Enable exit");
       AppendMenu(hFileMenu,MF_GRAYED | MF_STRING,IDM_Exit,"E&xit");
       AppendMenu(hHelpMenu=CreatePopupMenu(),MF_DISABLED | MF_STRING,IDM_About,"A&bout");
       hMenu=CreateMenu();
       AppendMenu(hMenu,MF_ENABLED | MF_POPUP,(UINT)hFileMenu,
                  "&File");
       AppendMenu(hMenu,MF_ENABLED | MF_POPUP,(UINT)hFileMenu,
                  "&Help");
       SetMenu(hWnd,hMenu);
       /*Show our window*/
       ShowWindow(hWnd,nCmdShow);
       UpdateWindow(hWnd);
       DrawMenuBar(hWnd);
 
       /*Beginning of message cycle*/
       while(GetMessage(&Msg,NULL,0,0))
       {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
       }
       return Msg.wParam;
     }
 
     LRESULT CALLBACK MenuDemoWndProc(HWND hWnd,UINT Message,
                                       UINT wParam,LONG lParam)
     {
      RECT Rect;
      static UINT nFlag=MF_ENABLED;
      char* pContent[]=
        {
         "Enable exit",
         "Disable exit"
        };
      static UINT nIndex=0;
      static HBITMAP hBitmap;
      int nDimension;
 
      switch(Message)
        {
         case WM_CREATE:
              nDimension=GetSystemMetrics(SM_CYMENU);
              hBitmap=LoadImage(hInst,"msdogs.bmp",IMAGE_BITMAP,
                                nDimension*2,nDimension,LR_LOADFROMFILE);
              //AppendMenu(GetMenu(hWnd),MF_BITMAP,IDM_Bitmap,hBitmap);
              break;
         case WM_COMMAND:
           switch(wParam)
             {
              case IDM_Enable_Disable:
                EnableMenuItem(hFileMenu,IDM_Exit,MF_BYCOMMAND | nFlag);
                nFlag=(nFlag==MF_ENABLED)? MF_GRAYED:MF_ENABLED;
                nIndex=(nIndex==0)?1:0;
                ModifyMenu(hFileMenu,IDM_Enable_Disable,MF_BYCOMMAND |
                           MF_STRING,IDM_Enable_Disable,pContent[nIndex]);
                break;
              }
         case WM_SIZE:
           SendMessage(hStatusWindow,WM_SIZE,wParam,lParam);
           GetClientRect(hWnd,&Rect);
           return 0;
         case WM_MENUSELECT:
         //Selection is losted
           if (((UINT) HIWORD(wParam)==0xffff)&((HMENU)lParam==0))
             {
              SendMessage(hStatusWindow,SB_SETTEXT,(WPARAM) 0,
                          (LPARAM)pMessages[5]);
              return 0;
             }
           if ((UINT)HIWORD(wParam)&MF_SYSMENU)
             {
              SendMessage(hStatusWindow,SB_SETTEXT,(WPARAM)0,
                            (LPARAM)pMessages[6]);
              return 0;
             }
          if ((UINT)HIWORD(wParam)&MF_POPUP)
             {
              SendMessage(hStatusWindow,SB_SETTEXT,(WPARAM)0,
                            (LPARAM)pMessages[3+LOWORD(wParam)]);
              return 0;
             }
          SendMessage(hStatusWindow,SB_SETTEXT,(WPARAM)0,(LPARAM)
                      pMessages[LOWORD(wParam)]);
          return 0;
         case WM_DESTROY:
           DeleteObject(hBitmap);
           PostQuitMessage(0);
           return 0;
 
         }
         return DefWindowProc(hWnd,Message,wParam,lParam);
        }
Исправил. Спасибо за помощь
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.07.2012, 20:32     Win32 API, LRESULT CALLBACK, ошибки #4
Цитата Сообщение от Артём121 Посмотреть сообщение
hBitmap=LoadImage(hInst,"msdogs.bmp",IMAGE_BITMAP,
nDimension*2,nDimension,LR_LOADFROMFILE);
119 строка. У меня компилятор пишет, что "невозможно преобразовать "HANDLE" в "HBITMAP" .Для преобразования "void*" к указателю на тип, не являющемуся "void", требуется явное приведение".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2012, 21:32     Win32 API, LRESULT CALLBACK, ошибки
Еще ссылки по теме:

Проигрывание CD с помощью Win32 API - C++
hi надо прослушать music cd так|| не получается играет не очень правильно!что не так? || || ...

Win32 API vs MFC vs .NET - C++
Что это такое, чем они отличаются и что сейчас лучше учить?

Временные диалоги Win32 API - C++
Во общем в Win32API я полный ноль, да и изучать мы его будем очень поврхностно и изучение закончится после сдачи заданий )), нам дали всего...

Win32 API Работа с процессами - C++
Господа, здравствуйте! Я новичок в программировании, помогите пожалуйста в программе, не знаю как сделать. Мне нужно реализовать...

For_each и аргументы callback-функции; Как передать callback'у больше одного аргумента - C++
Изучаю контейнеры и алгоритмы stl по Майерсу . С непривычки слегка охренел и запутался в них . В общем есть у меня простой вызов...

Win32 API, MFC, или Windows Forms? - C++
Здравствуйте! У меня очень простая задача на С++, нужно построить графики по точкам (данные из файлов) в разных окнах, масштабировать их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
09.07.2012, 21:32     Win32 API, LRESULT CALLBACK, ошибки #5
Для понимания лучше
C++
1
2
3
4
5
const IDM_Enable_Disable=0;
const IDM_Exit=1;
const IDM_About=2;
const IDP_File=3;
const IDP_Help=4;
заменить на
C++
1
2
3
4
5
6
7
8
enum
{
    IDM_Enable_Disable,
    IDM_Exit,
    IDM_About,
    IDP_File,
    IDP_Help,   
};
Yandex
Объявления
09.07.2012, 21:32     Win32 API, LRESULT CALLBACK, ошибки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru