Первый вопрос такой: как создать MenuBar. Я использую такую функцию
- Код: Выделить всё
function CreateMenuBar(hInst: HANDLE; Parent: HWND; ResID: Integer): HWND;
var
mbi: SHMENUBARINFO;
BR: TRect;
begin
Result := 0;
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.dwFlags := SHCMBF_EMPTYBAR;
mbi.nToolBarId := ResID;
mbi.hInstRes := hInst;
if SHCreateMenuBar(@mbi) then
Result := mbi.hwndMB;
end;
- Код: Выделить всё
CreateMenuBar(hInstance, Wnd, 2001);
Второй вопрос связан с диалогами из ресурса. Код вызова диалога следующий:
- Код: Выделить всё
DialogBox(hInstance, MAKEINTRESOURCE(1001), Wnd, DLGPROC(@mDlgProc));
- Код: Выделить всё
function mDlgProc(Dlg: HWND; mms: integer; wparam: WPARAM; lparam: LPARAM): INT_PTR; STDCALL;
var
shidi: SHINITDLGINFO;
begin
case mms of
WM_INITDIALOG:
begin
shidi.dwMask := SHIDIM_FLAGS;
shidi.dwFlags := SHIDIF_DONEBUTTON or SHIDIF_SIPDOWN or SHIDIF_SIZEDLGFULLSCREEN;
shidi.hDlg := Dlg;
SHInitDialog(@shidi);
Result := INT_PTR(True);
end;
WM_PAINT:
begin
//todo
end;
WM_CLOSE: EndDialog(Dlg, mms);
end; //case of
Result := INT_PTR(True);
end;
P.S.
Я решил в ответ на библиотеку KOL портированную для Win CE, портировать LENIN_INC для Win CE, уже несколько десятков функций успешно портированно, эта библиотека лучше чем KOL т.к. не использует ни классы ни объекты (используется "голый WinAPI"), и поэтому проги написанные с использованием этой библиотеки весят "катастрофически" мало, а оперативной памяти потребляют минимум (KOL оперативку "кушает не стесняясь"). Месяца эдак через четыре - пять выложу портированную версию библы.