Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Windows APIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 6

Автор А. Π›Π΅Π³Π°Π»ΠΎΠ²

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ рСсурсов. ΠœΡ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ всСм элСмСнтам управлСния ΠΈ нСпосрСдствСнно Π΄ΠΈΠ°Π»ΠΎΠ³Ρƒ. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ рСсурс Π΄ΠΈΠ°Π»ΠΎΠ³Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ DLG_MAIN. Π’ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ WinMain ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΊΠ½Π° любого класса, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Windows ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ класс для Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ, ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ CreateDialog, пСрСдавая Π΅ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°ΡˆΡƒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π΄ΠΈΠ°Π»ΠΎΠ³Π° (объясню ΠΏΠΎΠ·ΠΆΠ΅).

Π¦ΠΈΠΊΠ» сообщСний Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся нСстандартным, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ IsDialogMessage для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сообщСния. Π­Ρ‚Π° функция API Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ провСряСт, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ Π»ΠΈ Π΄Π°Π½Π½ΠΎΠ΅ сообщСниС ΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ, Π½ΠΎ ΠΈ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, пСрСсылаСт это сообщСниС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³Π°. Если сообщСниС Π½Π΅ Π±Ρ‹Π»ΠΎ адрСсовано Π΄ΠΈΠ°Π»ΠΎΠ³Ρƒ, ΠΌΡ‹ выполняСм ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ ΠΈ Π΄ΠΈΡΠΏΠ΅Ρ‚Ρ‡Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ.

Для удобства, ΠΌΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ HINSTANCE Π² глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ фактичСски являСтся ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Однако, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ слишком Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ собствСнного класса.

HINSTANCE TheInstance = 0;

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, char* cmdParam, int cmdShow) {

 TheInstance = hInst;

 _set_new_handler(&NewHandler);

 HWND hDialog = 0;

 hDialog = CreateDialog(hinst, MAKEINTRESOURCE(DLG_MAIN), 0, DialogProc);

 if (!hDialog) {

  char buf[100];

  wsprintf(buf, "Error x%x", GetLastError());

  MessageBox(0, buf, "CreateDialog", MB_ICONEXCLAMATION | MB_OK);

  return 1;

 }

 MSG msg;

 int status;

 while ((status = GetMessage(&msg, 0, 0, 0)) != 0) {

  if (status == –1) return –1;

  if (!IsDialogMessage(hDialog, &msg)) {

   TranslateMessage(&msg);

   DispatchMessage(&msg );

  }

 }

 return msg.wParam;

}

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π΄ΠΈΠ°Π»ΠΎΠ³Π° β€” Ρ‚ΠΎΡ‡Π½ΠΎ такая ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Windows, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ TRUE, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сообщСниС ΠΈ FALSE, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚. НСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ потрСбности Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, Π·Π°Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Windows Π΄Π΅Π»Π°Π΅Ρ‚ это Π·Π° нас всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π΄ΠΈΠ°Π»ΠΎΠ³Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ FALSE (Π΄Π΅Π»Π°Π΅Ρ‚ Π·Π° Вас это Π΄Π΅Π»ΠΎ, Ρ‚Π°ΠΊ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ Π½Π΅ сдСлано Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ использовании ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ процСдуры…). ΠŸΠ΅Ρ€Π²ΠΎΠ΅ сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ β€” WM_INITDIALOG, Π° послСднСС β€” WM_CLOSE. Π’ Ρ…ΠΎΠ΄Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этих сообщСний ΠΌΡ‹ создаСм ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅ΠΌ Β«ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Β» (Controller). Π”Ρ€ΡƒΠ³ΠΈΡ… случаях, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ этих, Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ сообщСния ΠΎΡ‚ Π΅Π³ΠΎ элСмСнтов управлСния управлСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠ°ΠΊ WM_COMMAND. Одно ΠΈΠ· элСмСнтов управлСния, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π­Ρ‚ΠΎ (Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ) Π»ΠΈΠ½Π΅ΠΉΠΊΠ° ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ (scrollbar). Она посылаСт сообщСниС WM_HSCROLL. БрСдства управлСния Π»ΠΈΠ½Π΅ΠΉΠΊΠΎΠΉ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ (scrollbar) ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π² частотном Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅, ΠΈ Ρ‚Π°ΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ Π΄Π΅Π»ΠΎ.

BOOL CALLBACK DialogProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {

 static Controller* control = 0;

 switch (message) {

 case WM_INITDIALOG:

  try {

   control = new Controller(hwnd);

  }

  catch (WinException e) {

   MessageBox(0, e.GetMessage(), "Exception", MB_ICONEXCLAMATION | MB_OK);

   PostQuitMessage(1);

  }  catch (…) {

   MessageBox(0, "Unknown", "Exception", MB_ICONEXCLAMATION | MB_OK);

   PostQuitMessage(2);

  }

  return TRUE;

 case WM_COMMAND:

  control->Command(hwnd, LOWORD (wParam), HIWORD (wParam));

  return TRUE;

 case WM_HSCROLL:

  control->Scroll(hwnd, LOWORD(wParam), HIWORD(wParam));

  return 0;

 case WM_DESTROY:

  PostQuitMessage(0);

  return TRUE;

 case WM_CLOSE:

  delete control;

  DestroyWindow(hwnd);

  return TRUE;

 }

 return FALSE;

}

Π”Π°Π²Π°ΠΉΡ‚Π΅, взглянСм Π½Π° Β«ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Β». ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт управлСния Π½Π° повСрхности Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ (Π²Π½Π΅Π΄Ρ€Π΅Π½Π½Ρ‹ΠΉ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ управлСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Β«ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Β». Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹, сСлСктивныС списки, Ρ€Π°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Π»ΠΈΠ½Π΅ΠΉΠΊΠΈ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ. ВстрСчаСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт управлСния Β«metafileΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рисуСт ΡˆΠΊΠ°Π»Ρƒ частот ΠΈ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° отобраТСния, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²ΡƒΠΌ статичСским ΠΏΠΎΠ΄ΠΎΠΊΠ½Π°ΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рисуСм Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ. И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Painter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся отвСтствСнным Π·Π° Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ пСрСрисовку ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠΎΠ΄ΠΎΠΊΠΎΠ½.

class Controller {

public:

 Controller(HWND hwnd);

 ~Controller();

 void Command(HWND hwnd, int id, int code);

 void Scroll(HWND hwnd, int cmd, int pos);

 void Paint(HWND hwnd);

 void ReInit(HWND hwnd);

 void Stop(HWND hwnd);

private:

 void InitScrollPositions();

 void PaintScale();

 BOOL _isStopped;

 int _bitsPerSample;

 int _samplesPerSecond;

 int _fftPoints;

 int _samplesPerBuf;

 EditReadOnly _edit;

 Combo _comboFreq;

 Combo _comboPoints;

 RadioButton _radio8;

 RadioButton _radio16;

 ScrollBarMap _scroll;

 StaticEnhMetafileControl _scaleFreq;

 ViewWave _viewWave;

 ViewFreq _viewFreq;

 Painter _display;

};

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Β«ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Β» заботится ΠΎΠ± ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ всСх элСмСнтов управлСния, пСрСдавая ΠΈΠΌ дСскриптор Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹. Как ΠΊΠΎΡΠΌΠ΅Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΄ΠΎΠ±Π°Π²ΠΊΡƒ, ΠΌΡ‹ присоСдиняСм Π½Π°ΡˆΡƒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΈΠΊΠΎΠ½ΠΊΡƒ ΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³Ρƒ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС систСма использовала Π±Ρ‹ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΈΠΊΠΎΠ½ΠΊΡƒ Windows.

Controller::Controller(HWND hwnd) :_isStopped(TRUE), _bitsPerSample(16), _samplesPerSecond(SAMPLES_SEC), _fftPoints(FFT_POINTS * 4), _samplesPerBuf(FFT_POINTS * 2), _radio8(hwnd, IDC_8_BITS), _radio16(hwnd, IDC_16_BITS), _scroll(hwnd, IDC_SCROLLBAR), _edit(hwnd, IDC_EDIT), _comboFreq(hwnd, IDC_SAMPLING), _comboPoints(hwnd, IDC_POINTS), _viewWave(hwnd, IDS_WAVE_PANE, FFT_POINTS * 8), _viewFreq(hwnd, IDS_FREQ_PANE), _scaleFreq(hwnd, IDC_FREQ_SCALE), _display(hwnd, _viewWave, _viewFreq, _samplesPerBuf, _samplesPerSecond, _fftPoints) {

 // Attach icon to main dialog

 HICON hIcon = LoadIcon(TheInstance, MAKEINTRESOURCE(ICO_FFT));

 SendMessage(hwnd, WM_SETICON, WPARAM(ICON_SMALL), LPARAM(hIcon));

 // Other initializations…

}

ИспользованиС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π² качСствС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ β€” ΠΎΡ‡Π΅Π½ΡŒ удобная ΠΈ простая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, особСнно для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠ°Π½Π΅Π»Π΅ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ интСрфСйс. ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ "ΠœΠΎΡ€ΡΠΊΠΎΠΉ Π±ΠΎΠΉ" (см. домашнюю страницу) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый ΠΏΡ€ΠΈΠ΅ΠΌ.

Π”Π°Π»Π΅Π΅: использованиС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½ Π² Windows прилоТСниях.

ИспользованиС Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ классов для ΠΎΠΊΠΎΠ½ Π΄ΠΈΠ°Π»ΠΎΠ³Π°

Окно диалога

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ А. И. Π›Π΅Π³Π°Π»ΠΎΠ²Π°

Англоязычный ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» находится Π½Π° сСрвСрС ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Reliable Software

ΠžΡ‚ΡΡŽΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΠΊΠ½ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³Π° (zip Π°Ρ€Ρ…ΠΈΠ² 14 ΠΊΠ±)

Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ для Windows ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся Ρ‚Π΅ΠΌ ΠΆΠ΅, Ρ‡Π΅ΠΌ являСтся Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС C. Π‘Π½Π°Ρ‡Π°Π»Π°, Windows ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ. Π—Π°Ρ‚Π΅ΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ обмСниваСтся ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π»ΠΎ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½ΠΎ, ΠΎΠ½ (ΠΈΠ»ΠΈ ΠΎΠ½Π°) Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ OK. Π’Π½ΠΎΠ²ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ взаимодСйствуСт со всСми Π²ΠΈΠ΄Π°ΠΌΠΈ элСмСнтов управлСния (Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ, устройствами, Π³ΠΈΠ·ΠΌΠΎΠ·Π°ΠΌΠΈ β€” Π½Π°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡ… ΠΊΠ°ΠΊ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅). Код Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° взаимодСйствуСт с этими элСмСнтами, посылая ΠΈ получая сообщСния Ρ‡Π΅Ρ€Π΅Π· свою Β«ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π΄ΠΈΠ°Π»ΠΎΠ³Π°Β». Π’ рСализациях Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½ имССтся ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°. Нам Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

Π§Ρ‚ΠΎ измСняСтся ΠΎΡ‚ Π΄ΠΈΠ°Π»ΠΎΠ³Π° ΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³Ρƒ:

β€’ Π Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ.

β€’ Π Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ элСмСнтов Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.

β€’ ВзаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтами.

Π­Ρ‚Π° ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ инкапсулирована Π² Π΄Π²ΡƒΡ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… клиСнтских классах: классС списка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ классС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π΄ΠΈΠ°Π»ΠΎΠ³Π°.

Класс списка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² инкапсулируСт Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Он обСспСчиваСт доступ для ΠΈΡ… восстановлСния ΠΈ измСнСния. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ рСализация этого класса находятся ΠΏΠΎΠ΄ ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (программиста, ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ наш ΠΊΠΎΠ΄).

Класс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π΄ΠΈΠ°Π»ΠΎΠ³Π° содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ управлСния для всСх элСмСнтов Π΄ΠΈΠ°Π»ΠΎΠ³Π° ΠΈ осущСствляСт взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. ΠšΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠ°ΠΊ прСдполагаСтся, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ этот класс ΠΎΡ‚ абстрактного класса DlgController ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ всС Π΅Π³ΠΎ чистыС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ΠžΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»Π΅ΠΉ. Нам Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ шаблон класса CtrlFactory, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нашСй ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ класса ModalDialog. Π€Π°Π±Ρ€ΠΈΠΊΠ° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° создаСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π΅Π³ΠΎ. Рис. 1 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ классами, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΌΠΈ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.

Рис. 1. ΠšΠ»Π°ΡΡΡ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Π² ΠΎΠ±Ρ€Π°Π·Π΅Ρ† проСктирования "Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ".