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

Функция обратного вызова - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Манипуляторы в С++ http://www.cyberforum.ru/cpp-beginners/thread345424.html
___________________Манипуляторы______________________ - endl_________________перевод строки - flush________________выгружает содержимое буфера в поток - dec_________________меняет формат вывода числа на десятичный - oct_________________ меняет формат вывода числа на восьмеричный - hex_________________меняет формат вывода числа на шестнадцатеричный - ws__________________извлекает и удаляет...
C++ Может кому понадобиться Выключение/перезагрузки компа и завершение сеанса Копался в windows.h искал чего нибудь интересного вот и нашел.... Вообщем функция для выключения перезагрузки и завершения сеанса ExitWindowsEx // выключить компьютер ExitWindowsEx(EWX_SHUTDOWN, 0); // перезагрузить компьютер ExitWindowsEx(EWX_REBOOT, 0); // завершить сеанс пользователя ExitWindowsEx(EWX_LOGOFF, 0); ну и сам загаловочный файл надо подключать... http://www.cyberforum.ru/cpp-beginners/thread345413.html
C++ Простая вставка в DBGrid
Привет Ребята... У меня возник вопрос есть Таблица DBGrid, вот функция void __fastcall TForm1::DateTimePicker1Change(TObject *Sender) { if (DBGrid1->DataSource->State == dsInsert || DBGrid1->DataSource->State ==dsEdit ) { Table1ShifrDate->Value = DateTimePicker1->DateTime; }
Ошибка при компиляции в Dev C++ C++
Здравствуйте, я скачал себе Dev C++, устновил на него opengl glut, компилирую такой вот код: #include <windows.h> #include <gl/glut.h> void display(){ glClear(GL_COLOR_BUFFER_BIT); glFlush(); } int main(int argc, char **argv){
C++ что изучать? http://www.cyberforum.ru/cpp-beginners/thread345381.html
подскажите какой язык выбрать для изучения чтобы потом можно работать, С/С++ или 1С
C++ Переписать программу на С++ перепишите пожалуйста на с++. очень надо Program massiv; Uses crt; Const n=5; m=5; Var a: array of integer; i, j, k,min,max, l, s: integer; Begin Clrscr; randomize; Writeln('исходный:'); begin подробнее

Показать сообщение отдельно
ElvenDragon
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
26.08.2011, 10:34     Функция обратного вызова
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
#undef UNICODE
#include <windows.h>
#include "resource.h"
#include <iostream>
#include <fstream>
using namespace std;
 
HWND hWnd;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) {
  MSG SM; 
  WNDCLASSEX P;
  P.cbSize = sizeof(WNDCLASSEX);
  P.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
  P.lpfnWndProc = WndProc;
  P.cbClsExtra = 0;
  P.cbWndExtra = 0;
  P.hInstance = hInstance;
  P.hIcon = (HICON)LoadImage(hInstance,MAKEINTRESOURCE(IDI_j ),IMAGE_ICON,32,32,0);
  P.hCursor = (HCURSOR)LoadImage(hInstance, IDC_ARROW,IMAGE_CURSOR,32,32,LR_DEFAULTCOLOR);
  P.hbrBackground = CreateSolidBrush(RGB(255,0,0));
  P.lpszMenuName = 0;
  P.lpszClassName = "Tor";
  P.hIconSm = 0;
  if(!RegisterClassEx(&P)) {
    MessageBox(NULL,"Не правильно зарегестрирован класс окна","Ошибка",MB_OK);
    return 0;
  }
  hWnd = CreateWindowEx(0,"Tor","Respect",WS_OVERLAPPEDWINDOW,500,200,500,300,NULL,NULL,hInstance,NULL);
  if(!hWnd) {
    MessageBox(NULL,"Не правильно создано окно","Ошибка",MB_OK);
    return 0;
  }
  ShowWindow(hWnd,nCmdShow);  
  while(GetMessage(&SM,NULL,0,0)) { 
    TranslateMessage(&SM); 
    DispatchMessage(&SM); 
  }
   
  return SM.wParam;
} 
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
  const int ras = 1000;
  static int wClient;
  static int hClient;
  static int xPos;
  static int yPos;
  static int i = 0;
  static int f = 0;
  static char si[ras];
  static int m1 = 0;
  static ofstream m("C:\\S.txt");
  HDC  HDc;
  PAINTSTRUCT P;
  static RECT R, S;
  S.right = 100;
  S.bottom = 265;
  int yes;
  switch (message) { 
    case WM_PAINT:
      if(m1 > 0) m.open("C:\\S.txt");
      HDc = BeginPaint(hWnd,&P);
      GetClientRect(hWnd,&R);
      SetBkColor(HDc,RGB(255,0,0));
      SetTextColor(HDc,RGB(0,255,0));
      if(i != 0) DrawText(HDc, si, -1, &R,0);
      m << P.rcPaint.right << ' ' << P.rcPaint.bottom;
      m.close();
      m1++;
      EndPaint(hWnd,&P);
      break;
    case WM_DESTROY:
      PostQuitMessage(0);
      break;
    case WM_CLOSE:
      yes = MessageBox(hWnd,"Вы уверены в своем желании закрыть приложение?","Вопрос?",MB_YESNOCANCEL | MB_ICONQUESTION);
      if(IDYES == yes) DestroyWindow(hWnd);
      break;
    case WM_CHAR:
     
      if(wParam == 0x8) si[--i] = '\0';
      else if(i < ras-1) {
        si[i] = wParam;
        i++;
      }
      else MessageBox(hWnd,"Вы вышли за пределы массива","Ошибка",MB_OK);
      InvalidateRect(hWnd,&S,TRUE);
      break;
    case WM_SIZE:
      wClient = LOWORD(lParam);
      hClient = HIWORD(lParam);
      break;
    case WM_MOUSEMOVE:
      xPos = LOWORD(lParam);
      yPos = HIWORD(lParam);
      if(yPos > hClient - 50) SetCursor(LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_TOR)));
      else SetCursor(LoadCursor(NULL,IDC_ARROW));
    case WM_KEYDOWN:
       
      if(wParam == VK_RIGHT) {
        for(int x = i; x > f; x--) si[x] = si[x-1]; 
        si[f] = ' ';
        f++,i++;
      }
      else if(wParam == VK_LEFT) {
        int r = sizeof(si)-1;
        for(int x = --f; x < r; x++) si[x] = si[x+1];
        si[r] = '\0';
        i--;
      }
      InvalidateRect(hWnd,&S,TRUE);
      break;
    default:
      return DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
}
Почему в функции обратного вызова (WndProc) переменную типа (RECT S) надо объявлять статической?
Да я знаю что она сохраняет значение ,но всё же почему её нельзя там объявить как локальную? То есть можно ,но почему - то когда я ее инициализирую размеры 100 и 265 её полям не присваиваются почему так? Что нельзя при создании локальной переменной инициализировать её каждый раз как в обычной функции там все работает. Так почему же в обычной можно ,а функции обратного вызова нельзя?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru