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

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

Войти
Регистрация
Восстановить пароль
 
Alukard Integral
0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 6
#1

Зависаем-с конкретно... - C++

04.11.2008, 23:35. Просмотров 906. Ответов 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
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
//   Демонстрация модального  диалога
#include <Windows.h> 
#include <String.h> 
#include <Stdio.h> 
#include "MyHeader.h"
 
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM); BOOL CALLBACK DialogFunc(HWND,UINT,WPARAM,LPARAM);
 
char szWinName[] = "МоеОкно";  // Имя класса окна
HINSTANCE hInst;
 
HBITMAP hBit1;
HBITMAP hBit2;
int X=1, Y=1; 
 
int WINAPI WinMain(HINSTANCE hThisInst, 
                   HINSTANCE hPrevInst, 
                   LPSTR     lpszArgs, 
                   int       nWinMode) 
   {
   HWND     hwnd;
   MSG      msg;
   WNDCLASS wcl;
   HACCEL   hAccel;
   // Определение класса окна:
   wcl.hInstance=hThisInst;   // Дескриптор приложения
   wcl.lpszClassName=szWinName;  // Имя класса окна
   wcl.lpfnWndProc=WindowFunc;      // Функция окна
   wcl.style=0;                  // Стиль по умолчанию
   wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION); // Иконка   
   wcl.hCursor=LoadCursor(NULL,IDC_ARROW);   // Курсор   
   wcl.lpszMenuName="MYMENU";                // Меню
   wcl.cbClsExtra=0;             // Без дополнительной
   wcl.cbWndExtra= 0;            // информации
   // Определить заполнение окна белым цветом   
   wcl.hbrBackground=
                  (HBRUSH)GetStockObject(WHITE_BRUSH);
   // Зарегистрировать класс окна
   if(!RegisterClass(&wcl))
      return 0;
   // Создать окно
   hwnd=CreateWindow(szWinName,     // Имя класса 
                     "Диалоги",     // Заголовок 
                     WS_OVERLAPPEDWINDOW,  // Стиль 
                     CW_USEDEFAULT, // Х-координата 
                     CW_USEDEFAULT, // Y-координата
                     CW_USEDEFAULT, // Ширина
                     CW_USEDEFAULT, // Высота 
                     HWND_DESKTOP,  // Нет родит. окна 
                     NULL,          // Нет меню
                     hThisInst, // Дескрип. приложения 
                     NULL);  // Без дополн. аргументов
 
   hInst=hThisInst; // Сохранить дескриптор приложения
   // Загрузить акселераторы:
   hAccel=LoadAccelerators(hThisInst,"MYMENU");
   // Показать окно и перерисовать содержимое: 
   ShowWindow(hwnd,nWinMode); 
   UpdateWindow(hwnd);   // Запустить цикл обработки сообщений: 
     
   hBit1=LoadBitmap(hThisInst,"MyBit2");  // Загр. растр
   hBit2=LoadBitmap(hThisInst,"MyBit3");  
 
   while(GetMessage(&msg,NULL,0,0)) 
      {
      if(!TranslateAccelerator(hwnd,hAccel,&msg))
         {
         TranslateMessage(&msg); // Использ. клавиатуру
         DispatchMessage (&msg); // Вернуться к Windows
         }
      }
      return msg.wParam;
   }
 
//  Следующая функция вызывается операционной системой 
//  Windows и получает в качестве параметров сообщения //  из очереди сообщений данного приложения
 
LRESULT CALLBACK WindowFunc (HWND   hwnd, 
                             UINT   message,                     
                             WPARAM wParam, 
                             LPARAM lParam)
   {
    HDC DC;
  HDC memDC;
// PAINTSTRUCT paintstruct;
 
   switch(message)
      {
         case WM_COMMAND: 
         switch(LOWORD(wParam))
         { 
     case IDM_DIALOG1:
         DialogBox(hInst,"MYDB",hwnd,
                 DialogFunc);
             break; 
           case IDM_HELP:
            MessageBox(hwnd, 
                "Помощь","Помощь",
                MB_OK) ;
            break;
         }
         break;
 
     case WM_PAINT:      // Перерисовка рабочей области         
                  DC=GetDC(hwnd);                   // Получить DC
                memDC=CreateCompatibleDC(DC);     // Совместимый DC
                SelectObject(memDC,hBit1);
                BitBlt(DC,X,Y,77,77,
                    memDC,0,0,SRCCOPY); // Вывод растра на экран
                ReleaseDC(hwnd,DC);        // Освободить DC
                DeleteDC(memDC);      
                   break;
 
            case  WM_LBUTTONDOWN:
                DC=GetDC(hwnd);                   // Получить DC
                memDC=CreateCompatibleDC(DC);     // Совместимый DC
                SelectObject(memDC,hBit1);
                BitBlt(DC,LOWORD(lParam),HIWORD(lParam),77,77,
                    memDC,0,0,SRCCOPY); // Вывод растра на экран
                ReleaseDC(hwnd,DC);        // Освободить DC
                DeleteDC(memDC);           // Освободить DC памяти
    
                  X = LOWORD(lParam);   // В X и Y записываются 
                  Y = HIWORD(lParam);   // текущие координаты мыши
                  InvalidateRect(hwnd,NULL,1); // Перерисов. экран
                   break;
                   
      case WM_DESTROY:     // Завершение программы   
         PostQuitMessage(0); 
         break;
 
      default:
         // Все сообщения, не обрабатываемые в данной 
         // функции, направляются на обработку по 
         // умолчанию
         return DefWindowProc(hwnd,   message, 
                              wParam, lParam);
      }
   return 0;
   }
 
// Простая функция диалога
BOOL CALLBACK DialogFunc (HWND   hdwnd,
                          UINT   message, 
                          WPARAM wParam, 
                          LPARAM lParam) 
   {
    HDC DC;
  HDC memDC;
 //  PAINTSTRUCT paintstruct;
   switch(message)
      {
      case WM_COMMAND:   // Обр-ка командных сообщений
         switch(LOWORD(wParam))
            {
        case WM_PAINT:      // Перерисовка рабочей области         
                  DC=GetDC(hdwnd);                   // Получить DC
                memDC=CreateCompatibleDC(DC);     // Совместимый DC
                SelectObject(memDC,hBit1);
                BitBlt(DC,350,100,77,77,
                    memDC,0,0,SRCCOPY); // Вывод растра на экран
                ReleaseDC(hdwnd,DC);        // Освободить DC
                DeleteDC(memDC);      
                   break;
 
            case IDD_RED:
                DC=GetDC(hdwnd);                   // Получить DC
                memDC=CreateCompatibleDC(DC);     // Совместимый DC
                SelectObject(memDC,hBit1);
                BitBlt(DC,350,100,77,77,
                    memDC,0,0,SRCCOPY); // Вывод растра на экран
                ReleaseDC(hdwnd,DC);        // Освободить DC
                DeleteDC(memDC);           // Освободить DC памяти
    
                MessageBox(hdwnd,
                    "Выбран Красный",
                    "Красный", MB_OK);
                InvalidateRect(hdwnd,NULL,1); // Перерисов. экран
 
 
               return 1; 
 
            case IDD_GREEN:
                DC=GetDC(hdwnd);                   // Получить DC
                memDC=CreateCompatibleDC(DC);     // Совместимый DC
                SelectObject(memDC,hBit2);
                BitBlt(DC,350,100,77,77,
                    memDC,0,0,SRCCOPY); // Вывод растра на экран
                
                ReleaseDC(hdwnd,DC);        // Освободить DC
                DeleteDC(memDC);           // Освободить DC памяти
                MessageBox(hdwnd,
                    "Выбран Зеленый",
                    "Зеленый", MB_OK);
                InvalidateRect(hdwnd,NULL,1); // Перерисов. экран
               return  1;
 
               
            case IDCANCEL:
                EndDialog(hdwnd,0);
                return 1; 
            }
      }
   return   0;
   }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2008, 23:35     Зависаем-с конкретно...
Посмотрите здесь:

C++ Builder FindWindowEx - найти конкретно Memo1
Макрос конкретно к определенной таблице? VBA
Взялся за Cи, конкретно за Си, без инкремента. C++
Prolog Родственные отношения, а конкретно теща
Посоветуйте конкретно БП до 100$
C++ Объясните пожалуйста, как конкретно работает код
Что конкретно сломалось?
Конкретно заглючил комп
HTML, CSS Силь конкретно для IE 8
C++ Нашел в схожей теме не могу понять в чем ошибка. Кроме того как конкретно сделать что были високосные года?
Что конкретно влияет на fps ?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Inlight
43 / 42 / 2
Регистрация: 17.09.2008
Сообщений: 98
05.11.2008, 10:03     Зависаем-с конкретно... #2
Код
Cannot open include file: 'MyHeader.h': No such file or directory
А где файл?
Alukard Integral
0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 6
05.11.2008, 13:44  [ТС]     Зависаем-с конкретно... #3
Cannot open include file: 'MyHeader.h': No such file or directory
А где файл?
Извиняюсь, мой косяк.
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
// Пример файла ресурсов, описывающего меню и диалог
#include "Mydialog.h"
#include <Windows.h>
 
MYMENU MENU
   {
   MENUITEM "Диалог &1", IDM_DIALOG1
   MENUITEM "Помощь",    IDM_HELP
   }
 
MYMENU ACCELERATORS 
   {
   VK_F1, IDM_DIALOG1,  VIRTKEY
   VK_F3, IDM_HELP,      VIRTKEY
   }
 
MYDB DIALOG 18, 18, 300, 150
CAPTION "Первый диалог"
STYLE DS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENU
   {
   DEFPUSHBUTTON "Батя", IDD_RED, 12, 40, 36, 14,  
                  WS_CHILD|WS_VISIBLE|WS_TABSTOP
   PUSHBUTTON "Матушка",  IDD_GREEN, 54, 40, 36, 14, 
                  WS_CHILD|WS_VISIBLE|WS_TABSTOP
 PUSHBUTTON "Кошка",  IDD_BLUE, 98, 40, 36, 14, 
                  WS_CHILD|WS_VISIBLE|WS_TABSTOP
   PUSHBUTTON "Сброс",    IDCANCEL,  52, 65, 37, 14,
                  WS_CHILD|WS_VISIBLE|WS_TABSTOP
   }
 
MyCur CURSOR MyCur.cur
MyIcon ICON MyIcon.ico
 
MyBit2 BITMAP F2.bmp
MyBit3 BITMAP M2.bmp
MyBit4 BITMAP K.bmp
 
//MyHeader.h
#define IDM_DIALOG1 100 
#define IDM_DIALOG2 101 
#define IDM_HELP    102
#define IDD_RED     103 
#define IDD_GREEN   104
#define IDD_BLUE   105
Надо будет сделать bmp-ки чтобы заработало. Мои не грузятся. :'(
Inlight
43 / 42 / 2
Регистрация: 17.09.2008
Сообщений: 98
05.11.2008, 13:54     Зависаем-с конкретно... #4
#include "Mydialog.h"
а этот файл где искать? Бмп-шки упакуй в zip-архив. а лучше запакуй и кинь весь проект (сpp, h, ресурсы...)
Yandex
Объявления
05.11.2008, 13:54     Зависаем-с конкретно...
Ответ Создать тему
Опции темы

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