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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Артём121
 Аватар для Артём121
63 / 63 / 1
Регистрация: 15.11.2010
Сообщений: 387
Записей в блоге: 1
09.07.2012, 18:32     Win32 API, LRESULT CALLBACK, ошибки #1
Помогите исправить ошибки
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, ошибки
Посмотрите здесь:

C++ Win32 API vs MFC vs .NET
С++ Win32 API C++
Исходники Win32 Api C++
Макросы, win32 API C++
Буфер обмена win32 api C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 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
 Аватар для Артём121
63 / 63 / 1
Регистрация: 15.11.2010
Сообщений: 387
Записей в блоге: 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
5282 / 4801 / 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", требуется явное приведение".
insolent
 Аватар для 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, ошибки
Ответ Создать тему
Опции темы

Текущее время: 04:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru