Вопрос о handle
От: Novichok2  
Дата: 12.04.02 03:58
Оценка:
case WM_CTLCOLOREDIT:
if( IDC_CLREDIT == GetDlgCtrlID( (HWND //здесь должен присутствовать handle контрола//) lParam ) )ВОПРОС — по своей природе handle это что-указатель, ID контрола или что-то другое. Скажем для Edit в этом примере, что здесь указывать. {
// Зеленый текст на черном фоне
HDC dc = (HDC) wParam;
SetBkMode( dc, TRANSPARENT );
SetTextColor( dc, RGB( 0, 255, 0) );
return (BOOL) GetStockObject( BLACK_BRUSH );
}
return FALSE;
Re: Вопрос о handle
От: Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 12.04.02 07:01
Оценка:
Здравствуйте Novichok2, Вы писали:

N>case WM_CTLCOLOREDIT:

N> if( IDC_CLREDIT == GetDlgCtrlID( (HWND //здесь должен присутствовать handle контрола//) lParam ) )ВОПРОС — по своей природе handle это что-указатель, ID контрола или что-то другое. Скажем для Edit в этом примере, что здесь указывать. {
N> // Зеленый текст на черном фоне
N> HDC dc = (HDC) wParam;
N> SetBkMode( dc, TRANSPARENT );
N> SetTextColor( dc, RGB( 0, 255, 0) );
N> return (BOOL) GetStockObject( BLACK_BRUSH );
N> }
N> return FALSE;

HWND — это индекс структуры окна в массиве. Фишка в том, что в 16ти битных Виндовсах этот хендл был настоящит дескриптором, вроде HLOCAL. Там все хендлы так были устроены. Для пущей защиты в 32х разрядном Вындоузе это перределали. Теперь хендл — это индекс в какомто массиве. А массив этот находится глубоко в недрах системы. Есть куча массивов — массивы окон, объектов ядра и тд.

А ID — это номер контрола в окне — для удобства доступа к конкретному контролу.

Тоже самое обстоит с HICON, HBITMAP и тд.


В 16битном выне ты мог внутренности любого объекта получить чз этот хендл
Вот так, к примеру, происходила запись иконки, сейчас так нельзя

int NEAR _pascal SaveMyIcon( HICON hIcon)
{
  int       fh, i, iResult;
  UINT      uiSize;
  DWORD     dwSize;
  OFSTRUCT  of;

    if (!hIcon)
      return FALSE;

    dwSize  = GlobalSize(hIcon);
    lpGMem  = GlobalLock(hIcon);
    fh = OpenFile ("myicon.bin", &of, OF_WRITE | OF_CREATE);

    if (fh == -1)  // If NOT opened successfully.
    {
     MessageBox(NULL, "Unable to create file", NULL, MB_OK );
     return FALSE;
    }

    uiSize = _lwrite(fh, (LPSTR)lpGMem, (UINT)dwSize);
    _lclose(fh);

    if (uiSize == -1 || uiSize < (UINT)dwSize)
    {
       MessageBox(NULL, "Unable to read file", NULL, MB_OK );
       return FALSE;
    }
    else // Everything worked, return hGMem.
    {
      return (HICON)hGMem;
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.