Таблица средствами WinAPI

Discussion in 'WASM.BEGINNERS' started by bigredcat, Nov 26, 2008.

  1. bigredcat

    bigredcat New Member

    Blog Posts:
    0
    Joined:
    Sep 3, 2007
    Messages:
    54
    Нужно в VC средствами WinAPI реализовать таблицу 100х100 и вывести туда значения... Ничего, кроме как добавить в окно 100х100 элементов Static, что-то не придумал. Но тогда еще и со Scroll Bars придется заморачиваться. Может есть проще вариант (типа элемента управления DataGrid) ?
     
  2. shoo

    shoo New Member

    Blog Posts:
    0
    Joined:
    Jul 17, 2003
    Messages:
    1,537
    Location:
    Ukraine
    есть listview
     
  3. mc black

    mc black Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2005
    Messages:
    213
    Location:
    Russia, N.Novgorod
    Можно и DrawText, только с ScrollBars и правда надо возится

    listview конечно больше подходит.
     
  4. bigredcat

    bigredcat New Member

    Blog Posts:
    0
    Joined:
    Sep 3, 2007
    Messages:
    54
    То, что доктор прописал :)
     
  5. AsmGuru62

    AsmGuru62 Member

    Blog Posts:
    0
    Joined:
    Sep 12, 2002
    Messages:
    689
    Location:
    Toronto
    Как напишешь код (100х100 элементов поставишь) - расскажи про скорость - интересно. Ну там, поскроллировать - насколько быстро?
    А также насколько быстро заполняется вся таблица?
    Или например как быстро находится текст - брать например 90-й столбец и прочитать в память все элементы ряда?
     
  6. Mikl___

    Mikl___ Супермодератор Staff Member

    Blog Posts:
    14
    Joined:
    Jun 25, 2008
    Messages:
    3,914
    bigredcat
    Можно и через TabbedTextOut -- 100 строк элементы которых разделены табуляцией
     
  7. Y_Mur

    Y_Mur Active Member

    Blog Posts:
    0
    Joined:
    Sep 6, 2006
    Messages:
    2,494
    AsmGuru62
    всё давно написано:
    \masm32\examples\exampl06\listview
    экспериментируй на здоровье ;)
     
  8. bigredcat

    bigredcat New Member

    Blog Posts:
    0
    Joined:
    Sep 3, 2007
    Messages:
    54
    По поводу реализации таблицы при помощи List View ... Попробывал сегодня сделать. Почти все работает, как надо, но...
    Как сделать, чтобы первый столбец (заголовки строк) при горизонтальном скроллинге оставались на месте?
    Пробывал добавить еще один элемент List View который бы выполнял роль заголовка строк и пролистывать его вместе с основной таблицей. Что-то типа:
    Code (Text):
    1. case LVN_BEGINSCROLL:
    2.     // hwndLVTable - значения таблицы
    3.     // hwndLVRowTitle - заголовок строк таблицы
    4.     LPNMLVSCROLL pnmLVS = (LPNMLVSCROLL)lParam;
    5.     if (pnmLVS->hdr.hwndFrom == hwndLVTable)
    6.     if (pnmLVS->dy)
    7.     {
    8.         int dy = pnmLVScroll->dy;
    9.         pnmLVScroll->dy = 0;
    10.         ListView_Scroll(hwndLVRowTitle, 0, dy);
    11.         break;
    12.     }
    но при этом вылезают полосы прокрутки и от hwndLVRowTitle и от hwndLVTable.

    AsmGuru62
    Скроллинг, заполнение работают быстро (но и машина соответсвует), другое не пробывал.
     
  9. driver

    driver New Member

    Blog Posts:
    0
    Joined:
    Jun 18, 2008
    Messages:
    302
    сделай 2 листвьева
     
  10. bigredcat

    bigredcat New Member

    Blog Posts:
    0
    Joined:
    Sep 3, 2007
    Messages:
    54
    В смысле? Я ж вроде так и делаю.

    Таблица довольно большая, приходится выполнять и вертикальный и горизонтальный скроллинг. Я и добавляю два List View: первый для заголовков строк; второй для заголовков столбцов и собственно значений таблицы. Вертикальную прокрутку заголовков строк выполняю как описано выше (по сообщению LVN_BEGINSCROLL от таблицы со значениями). Проблема в том, что при скроллинге вылезают полосы прокрутки от обоих элементов List View.
     
  11. scf

    scf Member

    Blog Posts:
    0
    Joined:
    Sep 12, 2005
    Messages:
    386
    Ручками, все ручками!
    голое окно со скроллбарами и разделительные линии с текстом через GDI
    все будет летать при любом размере, если реально отображать только то, что видно

    Для примера смотри аттач - откопал свою лабу 4летней давности