Пишу такой код, я вывел его в отдельную функцию:
function CreateMenuBar(hInst: HANDLE; Parent: HWND; ResID: Integer): HWND;
var
mbi: SHMENUBARINFO;
BR: TRect;
begin
Result := HWND(nil);
GetWindowRect(Parent, BR);
mbi.hwndMB := SHFindMenuBar(Parent);
if mbi.hwndMB <> 0 then
begin
DestroyWindow(mbi.hwndMB);
mbi.hwndMB := 0;
end;
FillChar(mbi, SizeOf(mbi), 0);
mbi.cbSize := sizeof(mbi);
mbi.hwndParent := Parent;
mbi.nToolBarId := ResID;
mbi.hInstRes := hInst;
if SHCreateMenuBar(@mbi) then
Result := mbi.hwndMB;
end;
Но что-то ничего, и размеры окна подбирал и строку
Result := HWND(nil);
удалял и ни чего. При сообщении WM_CREATE я делал так:
CreateMenuBar(hInstance, Wnd, 2001);
FillChar(s_sai, SizeOf(s_sai), 0);
s_sai.cbSize:=sizeof(s_sai);
s_sai это SHACTIVATEINFO, а в WM_ACTIVATE вставлял
SHHandleWMActivate(Wnd, wParam, lParam, @s_sai, 0);
что я только с этим кодом не делал всё равно неполучается. Как в Win32 хорошо при регистрации класа указал и всё, или в CreateWindowEx помойму в девятом параметре.