Beim Überarbeiten einer Klasse, die sich um die Minimierung in den Infobereich kümmert, habe ich in folgenden Code entdeckt:
// TaskSwitchWnd erstellen
BOOL CMfxMinimizeToTray::CreateTaskSwitchWnd()
{
// Fensterklasse registrieren, falls noch nicht geschehen
WNDCLASSEX wcTaskSwitch; ZeroMemory(&wcTaskSwitch, sizeof(wcTaskSwitch));
if (!GetClassInfoEx(AfxGetInstanceHandle(), TASKSWITCHWNDCLASS, &wcTaskSwitch))
{
// Infos setzen
wcTaskSwitch.cbSize = sizeof(wcTaskSwitch);
wcTaskSwitch.style = CS_DBLCLKS | CS_BYTEALIGNWINDOW;
wcTaskSwitch.lpfnWndProc = TaskSwitchWndProc;
wcTaskSwitch.hInstance = AfxGetInstanceHandle();
wcTaskSwitch.hIcon = (HICON) GetClassLongPtr(AfxGetMainWnd()->GetSafeHwnd(), GCLP_HICON);
wcTaskSwitch.hIconSm = (HICON) GetClassLongPtr(AfxGetMainWnd()->GetSafeHwnd(), GCLP_HICONSM);
wcTaskSwitch.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
wcTaskSwitch.lpszClassName = TASKSWITCHWNDCLASS;
wcTaskSwitch.cbWndExtra = sizeof(DWORD);
// Fensterklasse registrieren
VAPI(RegisterClassEx(&wcTaskSwitch));
}
// Fenster erstellen
m_hWndTaskSwitch = CreateWindow(TASKSWITCHWNDCLASS, _T(""), WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, m_hWnd, NULL, AfxGetInstanceHandle(), 0);
if (NULL == m_hWndTaskSwitch)
return FALSE;
// Elternfenster setzen
SetWindowLongPtr(m_hWndTaskSwitch, 0, (LONG_PTR) m_hWnd);
// Fenstertext vom Hauptfenster
TCHAR szWindowText[256]; GetWindowText(m_hWnd, szWindowText, countof(szWindowText));
// Fenstertext setzen
CString strTaskSwitch; strTaskSwitch.FormatMessage(IDS_MFX_TASKSWITCH, szWindowText);
SetWindowText(m_hWndTaskSwitch, strTaskSwitch);
//
return TRUE;
}
Was stimmt damit nicht?

sizeof(LONG_PTR) != sizeof(DWORD) auf Win64 ?!