Здравствуйте 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;
}
}