Ребята !!!!!!
В виндах по жизне стили менялись, меняются и будут меняться через:
LONG SetWindowLong( HWND hWnd,
int nIndex,
LONG dwNewLong
);
nIndex = GWL_STYLE
Да нууу!.
И это поможет в данном случае?
Кстати вот что такое ModifyStyle
BOOL PASCAL
CWnd::ModifyStyle(HWND hWnd, DWORD dwRemove, DWORD dwAdd, UINT nFlags)
{
return _AfxModifyStyle(hWnd, GWL_STYLE, dwRemove, dwAdd, nFlags);
}
AFX_STATIC BOOL AFXAPI _AfxModifyStyle(HWND hWnd, int nStyleOffset,
DWORD dwRemove, DWORD dwAdd, UINT nFlags)
{
ASSERT(hWnd != NULL);
DWORD dwStyle = ::GetWindowLong(hWnd, nStyleOffset);
DWORD dwNewStyle = (dwStyle & ~dwRemove) | dwAdd;
if (dwStyle == dwNewStyle)
return FALSE;
::SetWindowLong(hWnd, nStyleOffset, dwNewStyle); if (nFlags != 0)
{
::SetWindowPos(hWnd, NULL, 0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | nFlags);
}
return TRUE;
}
Finch, сорри, не успевал следить за всеми постами, и вопрос упустил из вида. На самом деле всё дело в MFC ( Вижуал Си если ты это имел ввиду). Это и есть врапер (wrapper) или обёртка для API. Один из основных моментов как раз и заключается в том, что хэндл окна засовывается в класс (CWnd) и все производные классы вызывают "обёрточные" функции не заботясь о нужном хэндле.
В частности GetDlgItem вызванная из производного CDialog класса
пользуется сохранённым при Create хэндлом. В принципе все исходники MFC открыты и достаточно заглянуть в них, чтоб увидеть что там происходит:
CWnd* CWnd::GetDlgItem(int nID) const
{
ASSERT(::IsWindow(m_hWnd));
if (m_pCtrlCont == NULL)
return CWnd::FromHandle(
::GetDlgItem(m_hWnd, nID));
else
return m_pCtrlCont->GetDlgItem(nID);
}