Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TreeView на WinAPI


DmitryS ©   (2004-06-28 09:08:00) 

Уважаемые знатоки WinAPI. Подскажите как нарисовать TreeView используя WinAPI ? Все что я нашел по этому вопросу для C++, на Delphi работать не хочет. Желательно небольшой пример.
Заранее благодарен.


DmitryS   (2004-06-30 10:34:00) [1]

Удалено модератором
Примечание: Offtopic


Игорь Шевченко   (2004-06-30 10:16:00) [2]

DmitryS   (30.06.04 09:56)


> Может это запрещенная тема ?


А в исходники Comctrls.pas смотреть коран не велит ?


DmitryS   (2004-06-30 09:56:00) [3]

Такое впечатление, что никому деревья не нужны. Облазил весь инет, а примера на Дельфи + WinAPI с деревом так и не встретил. Может это запрещенная тема ? :(


DmitryS   (2004-06-28 12:07:00) [4]

Ура-а-а (прошу прощения за эмоции).

Всем огромное спасибо.

P.S. Cамое обидное, что примера на Дельфи + WinAPI с деревом я так и не нашел. Может у кого ссылка есть.


Враль   (2004-06-28 11:48:00) [5]

Перед созданием дерева нелишне вызвать InitCommonControls


DmitryS   (2004-06-28 11:44:00) [6]

С CreatcWindow вроде разобрался сам, оказалось надо прописать в Uses файл Commctrl. Теперь ошибки нету. Но дерево все равно не видно. Вот программа следующее (просьба не смеяться, я начинающий):

program Poba;

uses Windows, Messages, Commctrl;

const
 WinName = 'MainWClass';
var
 MainF: HWND;
 MainMenu: HMENU;
 m_treeView: HWND;
 AMessage: msg;

function MainWndProc(Window: HWnd; AMessage, WParam,
                   LParam: Longint): Longint; stdcall; export;
begin
 case AMessage of
   WM_DESTROY: begin
     PostQuitMessage(0);
     Exit;
   end;
   else
     Result := DefWindowProc(Window, AMessage, WParam, LParam);
 end;
end;

function InitApplication: Boolean;
var
 wcx: TWndClass;
begin
 wcx.style := CS_HREDRAW or CS_VREDRAW;
 wcx.lpfnWndProc := @MainWndProc;
 wcx.cbClsExtra := 0;
 wcx.cbWndExtra := 0;
 wcx.hInstance := hInstance;
 wcx.hIcon := LoadIcon(0, IDI_APPLICATION);
 wcx.hCursor := LoadCursor(0, IDC_ARROW);
 wcx.hbrBackground := COLOR_WINDOW;
 wcx.lpszMenuName :=  nil;
 wcx.lpszClassName := PChar(WinName);

 Result := RegisterClass(wcx) <> 0;
end;

function InitInstance: HWND;
begin
 Result := CreateWindow(
 PChar(WinName),
 'Small program',
 WS_OVERLAPPEDWINDOW,
 Integer(CW_USEDEFAULT),
 Integer(CW_USEDEFAULT),
 Integer(CW_USEDEFAULT),
 Integer(CW_USEDEFAULT),
 0,
 0,
 hInstance,  
 nil);      
end;

begin
 if (not InitApplication) then begin
   MessageBox(0, 'Error1', nil, mb_Ok);
   Exit;
 end;
 MainF := InitInstance;
 if (MainF = 0) then begin
   MessageBox(0, 'Error2', nil, mb_Ok);
   Exit;
 end else begin
   ShowWindow(MainF, CmdShow);

   MainMenu:=CreateMenu();
   AppendMenu(MainMenu, mf_String, 1, PChar('menu-1'));
   AppendMenu(MainMenu, mf_String, 2, PChar('menu-2'));
   AppendMenu(MainMenu, mf_String, 3, PChar('menu-3'));
   AppendMenu(MainMenu, mf_String, 4, PChar('menu-4'));
   SetMenu(MainF, MainMenu);

   m_treeView:=CreateWindow(WC_TREEVIEW,'',
     WS_VISIBLE or WS_TABSTOP or WS_CHILD or TVS_HASLINES or TVS_HASBUTTONS or
     TVS_LINESATROOT, 10, 10, 100, 100, MainF, 0, hInstance, 0);

   UpdateWindow(MainF);
 end;

 while (GetMessage(AMessage, 0, 0, 0)) do begin
   TranslateMessage(AMessage);
   DispatchMessage(AMessage);
 end;
 Halt(AMessage.wParam);
end.

Вопрос ? Почему не видно дерево.


Cobalt   (2004-06-28 11:31:00) [7]

Удалено модератором


DmitryS   (2004-06-28 10:19:00) [8]

Прошу прощения за мою дремучесть.

Согласно инструкции, которые я нашел, Tree View создается функцией CreateWindowEx на базе класса окна WC_TREEVIEW :

hwndTree = CreateWindowEx(OL, WC_TREEVIEW, "",
   WS_VISIBLE | WS_CHILD | WS_BORDER |
   TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT,
   0, 0, rc.right - rc.left, rc.bottom - rc.top,
   hWnd, (HMENU) IDC_TREEVIEW, hInst, NULL);

либо

hTreeView = CreatcWindow(WC_TREEVIEW,"",
WSJVISIBLE | WS JTABSTOP | WS_CHILD | TVSJIASLINES | TVSJiASBUTTONS | TVS_LINESATROOT, 0, 0. Rcct.right, Rcct.bottom, hWnd, NULL, hlnst, NULL);

Но у меня ругается на WC_TREEVIEW. Я понимаю, что ей чего-то не хватает, может каку библиотеку использовать надо. Но какую я не знаю.

Всем сочувствующим - огромное спасибо.

2MBo - опять же все для С++, а я в нем ни бум-бум.


MBo   (2004-06-28 09:45:00) [9]

http://www.codeguru.com/Cpp/controls/treeview/


SammIk   (2004-06-28 09:38:00) [10]

Удалено модератором
Примечание: Создание пустых сообщений


SammIk   (2004-06-28 09:37:00) [11]

CreateWindowEx( WS_EX_CLIENTEDGE,'SysListView32', NiL,WS_CHILD or WS_VISIBLE or LVS_REPORT or LVS_SHAREIMAGELISTS,0, 0, 0, 0, hWnd, NiL, hInst, NiL


GrayWolf   (2004-06-28 09:35:00) [12]

TreeView:=CreateWindow('SysTreeView32',...)
Работает 100%. Или уточни вопрос...


Наверх

Титульная страница Поиск, карта сайта Написать письмо