Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

09.07.2012, 18:32. Просмотров 1640. Ответов 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 ;
Делаю по учебнику.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2012, 18:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Win32 API, LRESULT CALLBACK, ошибки (C++):

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

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

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

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

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

Обработка сообщений в win32 api - C++
Написал программу которая после ввода в поле edit текста exit и нажатия на кнопку выходит из программы, но почему то не работает. Вот...

4
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.07.2012, 18:55 #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
не объявленны.
1
Артём121
63 / 63 / 1
Регистрация: 15.11.2010
Сообщений: 393
Записей в блоге: 1
09.07.2012, 20:06  [ТС] #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);
        }
Исправил. Спасибо за помощь
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.07.2012, 20:32 #4
Цитата Сообщение от Артём121 Посмотреть сообщение
hBitmap=LoadImage(hInst,"msdogs.bmp",IMAGE_BITMAP,
nDimension*2,nDimension,LR_LOADFROMFILE);
119 строка. У меня компилятор пишет, что "невозможно преобразовать "HANDLE" в "HBITMAP" .Для преобразования "void*" к указателю на тип, не являющемуся "void", требуется явное приведение".
0
insolent
826 / 344 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
09.07.2012, 21:32 #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,   
};
1
09.07.2012, 21:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2012, 21:32
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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