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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
#1

"Поймать" сообщение от LISTBOX - C++

09.11.2011, 11:40. Просмотров 2054. Ответов 42
Метки нет (Все метки)

Рассматриваю тут пример в книге и вот почему-то он у меня срабатывать не хочет - не могу изменять масштаб в диалоговом окне так как он тупо вообще не выбирается, может стиля какого не хватает при создании диалогового окна, или ещё чего, подскажите пожалуйста.
Собственно main.h (константы и объявления функций)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#define MI_OPEN 101
#define MI_EXIT 102
#define MI_SETTINGS 103
#define ID_DOTS 201
#define ID_CURVE 202
#define ID_SCALE 203
 
//определение нового типа GrapgModes
enum GraphModes{DOTS=ID_DOTS,CURVE=ID_CURVE};
 
//прототипы функций для главного окна
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
void OnCommand(HWND,int,HWND,UINT);
void OnPaint(HWND);
void OnDestroy(HWND);
 
//прототипы функций для диалогового окна
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
BOOL DlgOnInitDialog(HWND,HWND,LPARAM);
void DlgOnCommand(HWND,int,HWND,UINT);
main.rc (диалоговое окно и меню, возможно в диалоговом окне в элементе LISTBOX какраз и есть ошибка)
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
#include "main.h"
#include <windows.h>
 
Main MENU
{
    POPUP "&Файл"
    {
        MENUITEM "&Открыть...",MI_OPEN
        MENUITEM "&Режимы...",MI_SETTINGS
        MENUITEM SEPARATOR
        MENUITEM "&Выход",MI_EXIT
    }
}
 
SettingsDlg DIALOG 150,0,125,80
STYLE WS_VISIBLE | WS_SYSMENU | WS_POPUP
CAPTION "Режимы вывода данных"
{
    CONTROL "Вид",-1,"BUTTON",BS_GROUPBOX,10,10,65,45
    CONTROL "Точки",ID_DOTS,"BUTTON",BS_AUTORADIOBUTTON,15,20,45,14
    CONTROL "Огибающая",ID_CURVE,"BUTTON",BS_AUTORADIOBUTTON,15,35,55,14
    CONTROL "",ID_SCALE,"LISTBOX",BS_NOTIFY|WS_VSCROLL|WS_BORDER,85,15,30,50
    CONTROL "Масштаб",-1,"STATIC",SS_LEFT,85,3,40,10
    CONTROL "Закрыть",IDOK,"BUTTON",BS_PUSHBUTTON,25,60,40,14
}
ну и главный файл
main.cpp
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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
#include <windows.h>
#include <windowsx.h>
#include "main.h"
 
char szClassName[]="MainWindow";
char szTitle[]="Программа 6-5";
char szFile[128];//для спецификации выбранного файла
short nBuf[500];//Буфер для чтения массива из файла
BOOL bDataOK=FALSE;//Если TRUE - данные прочитаны в буфер nBuf
HINSTANCE hI;//дескриптор приложения
short nBufScaled[500];//Буфер для масштабированного массива
int nScales[8]={200,175,150,125,100,75,50,25};//Массив масштабов
int nScaleIndex=4;//Текущее (и начальное) значение индекса в массиве масштабов
float nCurrentScales=1;//текущее (и начальное) значение масштаба
HWND hSettingsBox;//дескриптор немодального диалога
GraphModes Mode=DOTS;//режим наблюдения и его начальное значение
HPEN hPen;//дескриптор нового пера
 
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int)
{
    MSG msg;
    hI=hInst;
    WNDCLASS wc;
     ZeroMemory(&wc,sizeof(wc));
     wc.style=CS_VREDRAW;
     wc.lpfnWndProc=WndProc;
     wc.hInstance=hInst;
     wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
     wc.hCursor=LoadCursor(NULL,IDC_ARROW);
     wc.hbrBackground=GetStockBrush(WHITE_BRUSH);
     wc.lpszMenuName="Main";
     wc.lpszClassName=szClassName;
    RegisterClass(&wc);
 
    HWND hwnd=CreateWindow(szClassName,szTitle,WS_OVERLAPPEDWINDOW,
                           0,0,600,400,HWND_DESKTOP,NULL,hInst,NULL);
    ShowWindow(hwnd,SW_SHOWNORMAL);
    hPen=CreatePen(PS_SOLID,1,RGB(0,0,255));
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return 0;
}
 
 
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        HANDLE_MSG(hwnd,WM_COMMAND,OnCommand);
        HANDLE_MSG(hwnd,WM_PAINT,OnPaint);
        HANDLE_MSG(hwnd,WM_DESTROY,OnDestroy);
 
        default:
         return DefWindowProc(hwnd,msg,wParam,lParam);
    }
}
 
 
//функция обработки сообщения WM_COMMAND от меню
void OnCommand(HWND hwnd, int id, HWND, UINT)
{
    OPENFILENAME ofn;//структура для функции GetOpenFileName
    char szFilter[]="Файлы данных (*:DAT)\0*.dat\0Все файлы(*.*)\0*.*\0";
    DWORD nCnt;//Вспомогательная переменная для файловых операций
 
    switch (id)
    {
        case MI_OPEN:
         ZeroMemory(&ofn,sizeof(OPENFILENAME));
         ofn.lStructSize=sizeof(OPENFILENAME);//размер структуры
         ofn.hwndOwner=hwnd;//дескриптор окна-владельца диалога
         ofn.lpstrFilter=szFilter;//строка с шаблонами имен искомых файлов
         ofn.lpstrFile=szFile;//буфер для имени файла
         ofn.nMaxFile=sizeof(szFile);//его размер
         ofn.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
         if(GetOpenFileName(&ofn))
         {
             HANDLE hFile=CreateFile(szFile,GENERIC_READ,0,0,OPEN_EXISTING,0,NULL);
             if(hFile==INVALID_HANDLE_VALUE) break;//если не удалось открыть файл
             ReadFile(hFile,nBuf,2*500,&nCnt,NULL);//чтение из файла
             CloseHandle(hFile);
             bDataOK=TRUE;//данные имеются, можно выводить
 
             for(int i=0;i<500;i++)//выполним начальное масштабирование спектра
              nBufScaled[i]=nBuf[i]*nCurrentScales;
             InvalidateRect(hwnd,NULL,TRUE);//инициируем WM_PAINT
             break;
         }
 
         else
          break;//если файл не выбран
 
        case MI_EXIT:
         DestroyWindow(hwnd);
         break;
 
        case MI_SETTINGS:
         if(hSettingsBox==NULL)//если диалог ещё не открыт, создадим его
          hSettingsBox=CreateDialog(hI,"SettingsDlg",hwnd,DlgProc);
         break;
    }
}
 
//функция обработки сообщения WM_PAINT
void OnPaint(HWND hwnd)
{
    RECT r;
    PAINTSTRUCT ps;
    HDC hdc=BeginPaint(hwnd,&ps);
     HPEN hOldPen=SelectPen(hdc,hPen);
     GetClientRect(hwnd,&r);//получение координат рабочей области
     if(bDataOK)
     {
         switch(Mode)
         {
             case DOTS:
             {
                 for(int i=0;i<500;i++)
                  SetPixel(hdc,i,r.bottom-5-nBufScaled[i],RGB(0,0,255));//вывод точек
                 break;
 
             }
 
             case CURVE:
             {
                 MoveToEx(hdc,0,r.bottom-5-nBufScaled[0],NULL);
                 for(int i=1;i<500;i++)
                  LineTo(hdc,i,r.bottom-5-nBufScaled[i]);//вывод отрезков
             }
         }
     }
     SelectPen(hdc,hOldPen);
     EndPaint(hwnd,&ps);
}
 
//функция обработки сообщения WM_DESTROY
void OnDestroy(HWND)
{
    DeleteObject(hPen);
    PostQuitMessage(0);
}
 
//оконная процедура немодального диалога
BOOL CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        HANDLE_MSG(hwnd,WM_INITDIALOG,DlgOnInitDialog);
        HANDLE_MSG(hwnd,WM_COMMAND,DlgOnCommand);
 
        default:
         return FALSE;
    }
}
 
//функция обработки сообщения WM_INITDIALOG для диалогового окна
BOOL DlgOnInitDialog(HWND hwnd, HWND,LPARAM)
{
    char S[10];//строка для обмена данными со списком LISTBOX
    SendDlgItemMessage(hwnd,Mode,BM_SETCHECK,1,0L);//Нажать кнопку режима
 
    for(int i=0;i<8;i++)//заполнение списка LISTBOX строками текста
    {
        wsprintf(S,"%d%%",nScales[i]);//пересылка в строку числа и знака %
        SendDlgItemMessage(hwnd,ID_SCALE,LB_ADDSTRING,0,(LPARAM)S);
    }
    SendDlgItemMessage(hwnd,ID_SCALE,LB_SETCURSEL,nScaleIndex,0L);
    return TRUE;
}
 
//функция обработки сообщений WM_COMMAND для диалогового окна
void DlgOnCommand(HWND hwnd,int id,HWND,UINT codeNotify)
{
    switch(id)//код элемента управления
    {
        case IDOK://сообщение от кнопки закрыть
        case IDCANCEL://сообщение от системного меню диалога
         DestroyWindow(hwnd);//уничтожение окна немодального диалога
         hSettingsBox=NULL;//сбросим в нуль его дескриптор
         break;
 
        case ID_DOTS://сообщение от кнопки "Точки"
         Mode=DOTS;//устновим режим "Точки"
         InvalidateRect(GetParent(hwnd),NULL,TRUE);//инициируем WM_PAINT
         break;
 
        case ID_CURVE://сообщение от кнопки "Огибащая"
         Mode=CURVE;//установим режим "Огибающая"
         InvalidateRect(GetParent(hwnd),NULL,TRUE);//инициируем WM_PAINT
         break;
 
        case ID_SCALE://сообщение от списка, проанализируем извещение
         if(codeNotify==LBN_SELCHANGE)//если изменилось выделение в списке
         {
             nScaleIndex=(int)SendDlgItemMessage(hwnd,ID_SCALE,LB_GETCURSEL,0,0);
             nCurrentScales=(float)nScales[nScaleIndex]/100;//Преобразование строки в число
 
             for(int i=0;i<500;i++)//масштабирование спектра в соответствии
              nBufScaled[i]=nBuf[i]*nCurrentScales;//с новым масштабом
 
            InvalidateRect(GetParent(hwnd),NULL,TRUE);//инициируем WM_PAINT
         }
    }
}

Собственно в нём ошибка если есть то разве что в последней функции DlgOnCommand в case ID_SCALE (строка 197), так как именно там обрабатываются сообщения от моего LISTBOX с диалогового окна, все остальные функции работают корректно. Ну ещё возможно что есть ошибка при заполнении LISTBOX (это функция DlgOnInitDialog (строка 162)), хотя вроде заполнился он нормально и все 8 строк в нём присутствуют.

Сама программа,если интересно, выводит график, который она читает из dat файла (считывает первые 1000 байт). Файл dat с нормальным графиком могу предоставить, хотя можно тупо открыть любой файл чтобы программа считала с него 1000 байт, график только рандомный получится.

На скриншоте видно что ни один пункт в LISTBOX "Масштаб" не выбран и мышкой не выбирается.
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2011, 11:40     "Поймать" сообщение от LISTBOX
Посмотрите здесь:

Задача: игра "Поймать парасёнка" - C++
Описание &quot;Поймать парасёнка&quot; - один из видов игры в карты. Допустим за игральным столом 4 игрока. Ваша задача посчитать итоговый...

Сообщение об ошибке "функция-член уже определена" - C++
Вот код #include &lt;iostream&gt; using namespace std; class Matrix { private: int **Array; int nstr, nstl; public:

Сообщение об ошибке в строке system("pause"); - C++
Заданы матрицы A,B Вычислить A+B+A

Напишите программу, которая выводит на экран сообщение в "телеграфном" стиле: буквы сообщения должны появлятьс - C++
Напишите программу, которая выводит на экран сообщение в &quot;телеграфном&quot; стиле: буквы сообщения должны появляться по одной, с некоторой...

Как сделать, чтобы появлялось сообщение "Массив не создан", если не задано положительное число ранга матрицы - C++
Добрый день. Подскажите, пожалуйста, как сделать, чтобы программа выдавала сообщение &quot;Массив не создан&quot; во всех случаях, за исключением...

Напишите программу, которая выводит на экран сообщение в "телеграфном" стиле: буквы сообщения должны появляться по одной, с некоторой задержкой. - C++
Напишите программу, которая выводит на экран сообщение в &quot;телеграфном&quot; стиле: буквы сообщения должны появляться по одной, с некоторой...

Во введённом предложении заменить все сочитания "ах" на "ух" - C++
Задача такова,ребята. - В ведённом предложении заменить все сочитания &quot;ах&quot; на &quot;ух&quot;. Через char естественно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
09.11.2011, 12:54     "Поймать" сообщение от LISTBOX
  #16

Не по теме:

Цитата Сообщение от Gepar Посмотреть сообщение
ак в первом же сообщении весь код, main.cpp под спойлером просто чтобы меньше места занимало, нажми на него и будет весь код.
- ок возможно я невнимательно посмотрел...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
09.11.2011, 12:57  [ТС]     "Поймать" сообщение от LISTBOX #17
-=ЮрА=-, прикрепил zip архивом, посмотри пожалуйста, очень хотелось бы всё же разобраться с этим LISTBOX.
-=ЮрА=-
Заблокирован
Автор FAQ
09.11.2011, 13:19     "Поймать" сообщение от LISTBOX #18
Цитата Сообщение от Gepar Посмотреть сообщение
-=ЮрА=-, прикрепил zip архивом, посмотри пожалуйста, очень хотелось бы всё же разобраться с этим LISTBOX.
У меня не кодблокс я уже и UseMFCAsSharedDLL ставил, всё рано лупит

Не по теме:

Deleting intermediate files and output files for project 'main - Win32 Debug'.
--------------------Configuration: main - Win32 Debug--------------------
Compiling...
main.cpp
d:\мои документы\downloads\winprojincodeblocks\winprojincodeblocks\main.cpp(108) : warning C4244: '=' : conversion from 'float' to 'short', possible loss of data
d:\мои документы\downloads\winprojincodeblocks\winprojincodeblocks\main.cpp(222) : warning C4244: '=' : conversion from 'float' to 'short', possible loss of data
Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/main.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

main.exe - 2 error(s), 2 warning(s)



Добавлено через 1 минуту
PS: А разве 2 HISTANCE может быть WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int)
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.11.2011, 14:36     "Поймать" сообщение от LISTBOX #19
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
#include <windows.h>
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
HINSTANCE g_hinst;
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  HWND hwnd;
  MSG  msg ;
  WNDCLASS wc = {0};
  wc.lpszClassName = TEXT("programina");
  wc.hInstance     = hInstance ;
  wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
  wc.lpfnWndProc   = WndProc ;
  wc.hCursor       = LoadCursor(0,IDC_ARROW);
 
  g_hinst = hInstance;
 
  RegisterClass(&wc);
  hwnd = CreateWindow(wc.lpszClassName, TEXT("programina"),WS_OVERLAPPEDWINDOW | WS_VISIBLE,100, 100, 270, 170, 0, 0, hInstance, 0);
 
 
  while( GetMessage(&msg, NULL, 0, 0)) {
    DispatchMessage(&msg);
  }
  return (int) msg.wParam;
}
 
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
 
  static HWND hwndList, hwndStatic;
  const TCHAR *items[] = { TEXT("programina1"), TEXT("programina2"), TEXT("programina3"), TEXT("programina4") };
  int i;
  LRESULT sel = 0;
 
  switch(msg)
  {
      case WM_CREATE:
            hwndList = CreateWindow(TEXT("listbox"), NULL, WS_CHILD | WS_VISIBLE | LBS_NOTIFY,5, 5, 100, 100, hwnd,(HMENU) 1, g_hinst, NULL);
            hwndStatic = CreateWindow(TEXT("static"), TEXT(""),WS_CHILD | WS_VISIBLE,170, 50, 90, 25, hwnd, (HMENU) 2, g_hinst, NULL);
 
            for ( i = 0; i < 4; i++ ) {
                SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM) items[i]);
            }
            break;
 
      case WM_COMMAND:
            if (LOWORD(wParam) == 1) {
                if ( HIWORD(wParam) == LBN_SELCHANGE) {
                    sel = SendMessage(hwndList, LB_GETCURSEL, 0, 0);
                    SetWindowText(hwndStatic, items[sel]);
                    SetFocus(hwnd);
                }
            }
 
           break;
 
      case WM_DESTROY:
          PostQuitMessage(0);
          break;
  }
  return DefWindowProc(hwnd, msg, wParam, lParam);
}
Ноу МФСи
 Комментарий модератора 
Пункт 3.9 правил: Запрещено накручивать репутацию любым способом, включая создание пользователей-клонов, а также склонять (агитировать) других пользователей к ее повышению.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
09.11.2011, 18:40  [ТС]     "Поймать" сообщение от LISTBOX #20
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
PS: А разве 2 HISTANCE может быть WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int)
Что-то Вы меня пугаете.
http://msdn.microsoft.com/en-us/libr...59(de-de).aspx
C++
1
2
3
4
5
6
int CALLBACK WinMain(
  __in  HINSTANCE hInstance,
  __in  HINSTANCE hPrevInstance,
  __in  LPSTR lpCmdLine,
  __in  int nCmdShow
);
Разве Вы видел WinMain с другим набором параметров? Просто не используемые параметры я не называл (а зачем их называть, я ведь ими пользоваться всё равно не буду).
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
У меня не кодблокс я уже и UseMFCAsSharedDLL ставил, всё рано лупит
У Вас же точно есть VS 6.0, код собственно для неё, VS2010 не захочет компилировать так как кое-где нужны приведения типов.
А VS 6.0 вот пожалуйста:
Код
C:\c++\VS PROJECTS\Finogenov\main.cpp(89) : warning C4244: '=' : conversion from 'float' to 'short', possible loss of data
C:\c++\VS PROJECTS\Finogenov\main.cpp(202) : warning C4244: '=' : conversion from 'float' to 'short', possible loss of data

main.obj - 0 error(s), 2 warning(s)
Это НЕ MFC проект кстати, это Win32 Application проект же.

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Это какраз говорит что Вы создали неподходящее проект, MFC, Console Application либо ещё чего.

Добавлено через 6 минут
programina, Ваш пример работает вроде, но мне в нём кое что непонятно:
Цитата Сообщение от programina Посмотреть сообщение
wc.lpszClassName = TEXT("programina");
Во первых что делает макрос(?) TEXT перед строками текста в скобках? Примерно догадываюсь смысл, но хочу точно знать что он делает.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.11.2011, 18:48     "Поймать" сообщение от LISTBOX #21
Gepar, получаешь параметр из листбокса и передаешь его функции рисования...
Не пойму че у тебя не получается...
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
09.11.2011, 18:53  [ТС]     "Поймать" сообщение от LISTBOX #22
programina, нет, я Ваш код разбираю и мне интересно что делает макрос TEXT, до этого никогда с ним не сталкивался, так код компилируется у меня и работает.
-=ЮрА=-
09.11.2011, 19:00
  #23

Не по теме:

Gepar,

Цитата Сообщение от Gepar Посмотреть сообщение
Это какраз говорит что Вы создали неподходящее проект, MFC, Console Application либо ещё чего
- да я чайник и не знаю что такое Win32Application
Попробуй свой проект запустить оставив только main.cpp и main.h посмотришь на ошибки, ладно тут тебе programina помогает - успехов...

programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.11.2011, 19:04     "Поймать" сообщение от LISTBOX #24
Gepar, Text можно вообще убрать у меня на MinGW и без него все работает.
PS:
хотя у тебя может и не МinGW. К Codeblock многое прикрутить можно..
PSS:
Юра, это я чайник(с)
-=ЮрА=-
Заблокирован
Автор FAQ
09.11.2011, 19:08     "Поймать" сообщение от LISTBOX #25
Цитата Сообщение от Gepar Посмотреть сообщение
мне интересно что делает макрос TEXT, до этого никогда с ним не сталкивался
- winnt - накой тут юникод вообще не понятно!
C++
1
2
3
4
5
6
7
typedef LPSTR LPTCH, PTCH;
typedef LPSTR PTSTR, LPTSTR;
typedef LPCSTR LPCTSTR;
#define __TEXT(quote) quote         // r_winnt
 
#endif /* UNICODE */                // r_winnt
#define TEXT(quote) __TEXT(quote)   // r_winnt

Не по теме:

Проект вообще - не предполагает GetDlgItemText и поетому изменив програмно 2-ю строку в листе вместо изменённой строки получишь programina2 - потому что логики в алгоритме мало - это не получение строки листа! SetWindowText(hwndStatic, items[sel]);, ладно я ж тупой и ничё не знаю...

programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.11.2011, 19:29     "Поймать" сообщение от LISTBOX #26
Gepar, если у тебя не получается масштабировать, то я решила твою проблему
щас еще немного подправлю
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
09.11.2011, 20:18  [ТС]     "Поймать" сообщение от LISTBOX #27
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Попробуй свой проект запустить оставив только main.cpp и main.h посмотришь на ошибки
Как я его так запущу? У меня же диалоговое окно и меню из файла ресурсов берётся, у меня не так как у programina создаётся диалоговое окно.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.11.2011, 20:24     "Поймать" сообщение от LISTBOX #28
Gepar я не свой, а твой проект переделала и все работает
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
09.11.2011, 20:26  [ТС]     "Поймать" сообщение от LISTBOX #29
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Проект вообще - не предполагает GetDlgItemText и поетому изменив програмно 2-ю строку в листе вместо изменённой строки получишь programina2
А чем плох такой вариант, ведь не планируется выводить в LISTBOX чего-либо ещё кроме указанных 8 (у меня) параметров, только у меня не получается отловить LBN_SELCHANGE, непонятно мне только почему. Хотя я вот не уверен тот ли я параметр просматриваю, как узнать что делает макрос HANDLE_MSG конкретно с WM_NOTIFY ? Никак не могу в msdn найти.

Добавлено через 1 минуту
programina, так где же у меня ошибка, проект тотальной переделке не подлежит, в нём только нужно исправить ошибку, конкретно сейчас я думаю что я ловлю LBN_SELCHANGE не через тот параметр, хотя может я и ошибаюсь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2011, 20:26     "Поймать" сообщение от LISTBOX
Еще ссылки по теме:

Несовместимые типы операндов ("HKL" и "int") - C++
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)) == 409) Выдает ошибку &quot;несовместимые типы операндов (&quot;HKL&quot; и...

"НОК трех чисел" и "Площадь треугольника" - C++
Помогите пожалуйста решить 2 задачи. 1. Разработать функцию, возвращающую наименьшее общее кратное трёх заданных натуральных чисел. 2....

Class "IEntity" не содержит члена "m_pEntityId" - C++
помогите 24 IntelliSense: class &quot;IEntity&quot; не содержит члена &quot;m_pEntityId&quot;

Сокращение слов (например, "напряженность"- "напр-ть") - C++
нужно чтобы вместо, к примеру, слово &quot;напряженность&quot; заменялось на &quot;напр-ть&quot;. Я понял, что для этого нужно создать два txt-файла, с которых...

Вывести сообщение "Можно", если из букв введенной строки X можно составить введенную строку Y - C++
Не могу понять самой сути задания. Вывести сообщение &quot;Можно&quot;, если из букв введенной строки X можно составить введенную строку Y,при...


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

Или воспользуйтесь поиском по форуму:
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.11.2011, 20:26     "Поймать" сообщение от LISTBOX #30
вот так нужно
C++
1
2
3
4
5
6
7
8
9
10
11
12
        case ID_SCALE:///сообщение от списка, проанализируем извещение
         //if(codeNotify==LBN_SELCHANGE)//если изменилось выделение в списке
         //{
             nScaleIndex=(int)SendDlgItemMessage(hwnd,ID_SCALE,LB_GETCURSEL,0,0);
             nCurrentScales=(float)nScales[nScaleIndex]/100;//Преобразование строки в число
 
             for(int i=0;i<500;i++)//масштабирование спектра в соответствии
              nBufScaled[i]=nBuf[i]*nCurrentScales;//с новым масштабом
 
            InvalidateRect(GetParent(hwnd),NULL,TRUE);//инициируем WM_PAINT
            break;
         //}
в main.rc нотифи только делает строки в листбоксе невыделяемыми

C++
1
2
3
4
5
6
7
8
9
10
CAPTION "Режимы вывода данных"
{
    CONTROL "Вид",-1,"BUTTON",BS_GROUPBOX,10,10,65,45
    CONTROL "Точки",ID_DOTS,"BUTTON",BS_AUTORADIOBUTTON,15,20,45,14
    CONTROL "Огибающая",ID_CURVE,"BUTTON",BS_AUTORADIOBUTTON,15,35,55,14
    //CONTROL "",ID_SCALE,"LISTBOX",BS_NOTIFY|WS_VSCROLL|WS_BORDER,85,15,30,50
    CONTROL "",ID_SCALE,"LISTBOX", WS_VSCROLL|WS_BORDER,85,15,30,50
    CONTROL "Масштаб",-1,"STATIC",SS_LEFT,85,3,40,10
    CONTROL "Закрыть",IDOK,"BUTTON",BS_PUSHBUTTON,25,60,40,14
}

PS:
никаких ifов в caseах
Yandex
Объявления
09.11.2011, 20:26     "Поймать" сообщение от LISTBOX
Ответ Создать тему
Опции темы

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