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

WinAPI vs VCL - Привязка к окну каких-либо данных - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Можно ли работать в ресурсами в managed C++ http://www.cyberforum.ru/cpp-beginners/thread503578.html
Пытаюсь обратиться к ресурсу: res = FindResource(NULL, MAKEINTRESOURCE(IDS_STRING101), RT_STRING); возращается NULL аналогичный код в обычном плюсе, выполняется отлично
C++ Управление окнами другой программы Доброго времени суток... Я сам не профи по Си++, но в СИ разбираюсь хорошо. А вопрос у меня такой: Есть ли способ одной программе управлять открытыми окнами других программ? Если конкретнее, хочу создать что-то типа средства автозаполнения. Требуется каким-то образом указать программе окно, затем необходимо найти в нем текстовые области и вводить в них текст (текст тоже вводит... http://www.cyberforum.ru/cpp-beginners/thread503557.html
Вопрос по передаче параметров в процу из C# в управляемый C+ C++
хм-хм... удалось только через извращённое ковыряние и unsafe: C++ сторона:</P><FONT size=2><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' <SPAN style="mso-tab-count: 1 <FONT color=#000000> </SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US...
C++ Как получить признак наличия соответствующих сигналов на шине?
В разъём шины ISA (на худой конец, PCI) включено некое нестандартное устройство. Это устройство выставляет на шину некоторые сигналы, по наличию которых нужно начать что-то рисовать на форме. Как получить признак наличия соответствующих сигналов на шине?
C++ html-страница с картинками в качестве ресурса приложения. http://www.cyberforum.ru/cpp-beginners/thread503486.html
Доброй ночи всем! Делаю прогу на VC++ (среда VS.NET 2003). Основа-диалоговое окно на классе CHtmlDialog.Хотела отображать в нем html-страницу,которая входит в ресурсы программы.Только вот с картинками (gif) лажа получается.Вроде бы можно поместить страницу вместе с картинками в файл.dat.Подскажите,это сделать и как работать с таким ресурсом.Или может кто подскажет другой вариант?
C++ Класс для работы с матрицами boombastik (07.04.2006) Вот тут полное описание библиотеки: http://www.boost.org/libs/numeric/ublas/doc/index.htm Неплохая библиотека :) . Люди, у кого есть нервы скачать весь сайт и в архиве прислать ко мне на мыло :) (Библиотека хорошая, а на качалку у меня регистрация сдохла :)) e-mail: Feniksa@rambler.ru подробнее

Показать сообщение отдельно
John Paramol
Сообщений: n/a
23.06.2012, 21:40     WinAPI vs VCL - Привязка к окну каких-либо данных
Отказался от SetWindowLong.
Просто сделал статическим членом класса вектор, содержащий пары HWND-this;
в конструкторе добавляю пару, в деструкторе удаляю, а в WndProc перебираю все
пары, выбираю нужную и беру this.

Чтобы не ходить вокруг да около, покажу урезанный вариант класса

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
#include <windows.h>
#include <windowsx.h>
#include <typeinfo.h>
#include <vector.h>
 
class __rtti XXWindow
{
  private:
    XXWindow();
    XXWindow(const XXWindow &obj);
  protected:
    typedef struct
    {
      HWND Hwnd;
      LPVOID This;
    } XXHWND2THIS;
    static vector<XXHWND2THIS> HwndTable;
 
    // ...
 
    HINSTANCE hInstance;
    WNDCLASSEX WndClassEx;
    char const *ClassName;
  public:
    HWND Handle;
 
    // ...
 
    XXWindow(HINSTANCE hinstance,DWORD dwExStyle,DWORD dwStyle,HWND parent)
    : hInstance(hinstance),
      Handle(NULL),
      ClassName(typeid(*this).name())
    {
      WndClassEx.cbSize          = sizeof(WNDCLASSEX);
      WndClassEx.style           = CS_HREDRAW | CS_VREDRAW;
      WndClassEx.lpfnWndProc     = WndProc;
      WndClassEx.cbClsExtra      = 0;
      WndClassEx.cbWndExtra      = 0;
      WndClassEx.hInstance       = hInstance;
      WndClassEx.hIcon           = NULL;
      WndClassEx.hCursor         = LoadCursor(NULL, IDC_ARROW);
      WndClassEx.hbrBackground   = (HBRUSH)COLOR_BTNSHADOW;
      WndClassEx.lpszMenuName    = NULL;
      WndClassEx.lpszClassName   = ClassName;
      WndClassEx.hIconSm     = NULL;
      RegisterClassEx(&WndClassEx);
      Handle = CreateWindowEx(dwExStyle, ClassName, ClassName, dwStyle,
            CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, parent, NULL, hInstance, NULL);
      if(Handle == NULL) { Beep(1000,100); return; }
      XXHWND2THIS tbl = {(HWND)Handle,(LPVOID)this};
      HwndTable.push_back(tbl); // добавляю пару в вектор
    }
    ~XXWindow()
    {
      UINT size = HwndTable.size();
      for(UINT i=0; i<size; ++i)
        if(HwndTable[i].Hwnd == Handle)
          HwndTable.erase(HwndTable.begin()+i); // удаляю пару
    }
    static LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
    {
      static BOOL dispatched;
      static LRESULT res;
      static XXWindow *ptr;
      ptr = NULL;
      UINT size = HwndTable.size();
      for(UINT i=0; i<size; ++i)
        if(HwndTable[i].Hwnd==hwnd)
          ptr=(XXWindow*)HwndTable[i].This; // достаю this
      if(ptr==NULL) return DefWindowProc(hwnd, Message, wParam, lParam);
      dispatched = FALSE;
      res = ptr->Dispatch(hwnd, Message, wParam, lParam, dispatched);
      if(dispatched) return res;
      switch(Message)
      {
        HANDLE_MSG(hwnd, WM_COMPACTING,         ptr->Event_OnCompacting);
        HANDLE_MSG(hwnd, WM_WININICHANGE,   ptr->Event_OnWinIniChange);
        HANDLE_MSG(hwnd, WM_SYSCOLORCHANGE, ptr->Event_OnSysColorChange);
        // ...
        // дальше продолжается длинный-длинный список хендлеров
        // ...
      }
      dispatched = TRUE;
      return ptr->Dispatch(hwnd,Message,wParam,lParam,dispatched);
    }
    virtual LRESULT Dispatch(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam, BOOL &Dispatched)
    {
      if(Dispatched) return DefWindowProc( hwnd, Message, wParam, lParam );
      return 0;
    }
    //-----------------------------------------------------------
    // Message handlers.
    //-----------------------------------------------------------
    virtual void Event_OnCompacting(HWND hwnd, UINT compactRatio)
    {
        DefWindowProc( hwnd, WM_COMPACTING, (WPARAM)compactRatio, (LPARAM)0L );
    }
    virtual void Event_OnWinIniChange(HWND hwnd, LPCTSTR lpszSectionName)
    {
        DefWindowProc( hwnd, WM_WININICHANGE, (WPARAM)0U, (LPARAM)lp
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru