Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Вниз

TreeView на WinAPI   Найти похожие ветки 

 
DmitryS   (2004-06-28 09:08) [0]

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


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

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


 
SammIk ©   (2004-06-28 09:37) [2]

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


 
SammIk ©   (2004-06-28 09:38) [3]

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


 
MBo ©   (2004-06-28 09:45) [4]

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


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

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

Согласно инструкции, которые я нашел, 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 - опять же все для С++, а я в нем ни бум-бум.


 
Cobalt ©   (2004-06-28 11:31) [6]

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


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

С 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.

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


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

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


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

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

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

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


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

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


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

DmitryS   (30.06.04 09:56)


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


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


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

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



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.033 c
1-1090838969
Фагот
2004-07-26 14:49
2004.08.08
Планировщик


1-1090444840
Diver
2004-07-22 01:20
2004.08.08
Тоже большие числа?


3-1089655610
Forelli
2004-07-12 22:06
2004.08.08
Работа СУБД без InterBase и Delphi.


3-1089873227
Berezne
2004-07-15 10:33
2004.08.08
Как восстановить индексы?


3-1089962522
denis24
2004-07-16 11:22
2004.08.08
Редактирование в гриде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский