|
Программирование >> Перегруженные имена функций и идентификаторы
m bCreated=FALSE; Теперь мы можем использовать ProgressBar в строке статуса, естественно не забыв создать этот объект. Предположим, у нас есть функция CMainFrame::OnWork(). Она будет выглядеть примерно так: void CMainFrame::OnWork() { RECT rc; m wndStatusBar.GetItemRect(0,&rc); if (m bCreated==FALSE) создаем m progress m progress.Create(WS VISIBLEWS CHILD, rc,&m wndStatusBar, Устанавливаем размер от 0 до 100 m progress.SetRange(0,100); m progress.SetStep(1); m bCreated=TRUE; for (int I = 0; I < 100; Sleep(20); m progress.StepIt(); Если откомпилировать проект на этой фазе, то все будет работать, но при изменении размера окна линейка ProgressBarа размеры менять не будет, поэтому необходимо перекрыть событие OnSize: void CMainFrame::OnSize(UINT nType, int cx, int cy) CFrameWnd::OnSize(nType, cx, cy); if (m bCreated) RECT rc; m wndStatusBar.GetItemRect(0,&rc); m progress.SetWindowPos(&wndTop, rc.left, rc.top, rc.right - rc.left,rc.bottom - rc.top, 0); Вот теперь все. Откомпилируйте проект и убедитесь, что все работает. Как использовать CTreeCtrl для построения дерева каталогов диска, как в Проводнике? Неужели необходимо рекурсивно просмотреть диск, а потом прописать ручками все Итемы данного контрола?? Это тормозно и глючно. На больших дисках это займет несколько минут. Если каталоги добавляются или удаляются другими приложениями во время работы твоего контрола, то будешь весь в проблемах. Все гораздо проще. Никаких рекурсий. Просматриваем корневой каталог на предмет наличия подкаталогов и создаем итемы первого уровня, в которых создаем по одному фиктивному итему (чтобы крестик был и итем можно было раскрыть). + Каталог 1 + Каталог 2 + Каталог 3 Как только юзер пытается раскрыть итем, соответствующий некому каталогу, мы удаляем из него фиктивный итем, просматриваем этот подкаталог и добавляем соответствующие итемы со своими фиктивными внутри. -Каталог 1 + Каталог 4 + Каталог 5 + Каталог 6 + Каталог 2 + Каталог 3 Как только юзер закрывает итем, мы удаляем из него все дочерние итемы и обратно добавляем фиктивный. Если структура каталогов изменилась, для обновления юзеру достаточно просто закрыть и открыть соответствующую ветку. Именно так и работает Проводник . Есть класс - потомок CListView. Как изменить стиль у объекта CListCtrl, принадлежащего к этому *view (например установить стиль Report)? Для этого пишите в OnInitialUpdate вашего вида: void CMyListView::OnInitialUpdate() CListView::OnInitialUpdate(); CListCtrl& theCtrl = GetListCtrl(); DWORD dwStyle=GetWindowLong(theCtrl.m hWnd,GWL STYLE); SetWindowLong(theCtrl.m hWnd,GWL STYLE,dwStyleLVS REPORT); Гораздо проще перекрыть PreCreateWindow (лучше всего воспользоваться C1assWizard-ом) и поковырять переданный по сс1лке CREATESTRUCT типа такого: BOOL CMyListView::PreCreateWindow(CREATESTRUCT& cs) cs.style=LVS REPORT; так мы добавляем стиль cs.style&=LVS REPORT; а вот так снимаем return CMyListView::PreCreateWindow(cs); Как CString привести к char *? #include <atlbase.h> USES CONVERSION; CString strData( T( Some Data )); char* lpszString = T2A((LPTSTR)(LPCTSTR)strData); CString tmp str; char* st; st=tmp str.GetBuffer(tmp str.GetLength()) важно то, что если с tmp str что-либо сделать, то необходимо опять получить указатель на внутренний буфер CString. Какие библиотеки Freeware/Commercial существуют для Visual C++? 1. BCG Contro1 Library (freeware) 2. CJLibrary (freeware) Фирма Stringray Software производит библиотеки дя Visua1 C++ (MFC, ATL): 1. Stingray Objective Too1kit (PRO) - набор различных компонентов для MFC и ATL.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |