Тут столкнулся с небольшой проблемой связанной со вкладками- вкладки долго переключаются. Не так, чтобы очень долго, но я успеваю увидеть "мигание" экрана. Вкладки реализованы через диалоги: Код (Text): Dialog0 DIALOG 0,0,0,0 FONT 8,"MS Sans Serif" STYLE WS_CHILD|WS_POPUP|DS_3DLOOK|DS_CONTEXTHELP { CONTROL "",0,"Static",WS_CHILD|WS_VISIBLE|SS_CENTERIMAGE|SS_CENTER,0,0,75,25 } Переключение диалогов происходит через функцию: Код (Text): void ShowTab(int n) { //... /*BorderSize- толщина рамки TitleSize- размер заголовка окна TabWidth- толщина контрола со вкладками(SysTabControl32) n- вкладка на которую надо переключить CurrentTab- текущая вкладка g_hWnd- HWND главного окна g_hDlg- массив с HWND заголовков*/ GetClientRect(g_hWnd,&ClientRect); GetWindowRect(g_hWnd,&WindowRect); MoveWindow(g_hDlg[n],WindowRect.left+BorderSize,WindowRect.top+TitleSize+TabWidth,ClientRect.right,ClientRect.bottom-20,FALSE); ShowWindow(g_hDlg[n],SW_SHOW); if(CurrentTab!=-1) ShowWindow(g_hDlg[CurrentTab],SW_HIDE); CurrentTab=n; return; } Причём замер скорости этой функции через GetTickCount стабильно даёт 0 мс. Подскажите пожалуйста, в чём может быть дело?
Не помогло. Сейчас у родительского окна стили Код (Text): WS_CAPTION|WS_SYSMENU|WS_VISIBLE|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SIZEBOX а у контрола Код (Text): WS_CHILD|WS_VISIBLE|WS_TABSTOP
Код (Text): nTab=TabCtrl_GetCurSel(lpNMHdr->hwndFrom); ShowTab(nTab); ... Код (Text): if(n==nTab) { WCHAR temp[10]; TC_ITEM Item={TCIF_TEXT,NULL,NULL,temp,4,NULL,NULL}; _itow(nTab,temp,10); g_hDlg[nTab]=CreateDialogParam(g_hInst,L"Dialog0",hTab,DialogProc,nTab); SendMessage(hTab,TCM_INSERTITEM,nTab,(LPARAM)&Item); SendMessage(hTab,TCM_SETCURSEL,nTab,0); nTab++; } Условие всегда будет истинным, т.е. при клике на любой вкладке у Вас всегда будет создаваться ещё одно окно. Возможно дело в этом.
Большое спасибо за помощь, но к сожалению не то . n- это номер вкладки по которой тыкнули, а nTab- это номер последней вкладки(крайняя справа, на ней изображён плюсик). Т.е. этот кусок кода сработает только если тыкнуть по самой правой вкладке и сделает следующее: Код (Text): WCHAR temp[10]; TC_ITEM Item={TCIF_TEXT,NULL,NULL,temp,4,NULL,NULL}; _itow(nTab,temp,10); g_hDlg[nTab]=CreateDialogParam(g_hInst,L"Dialog0",hTab,DialogProc,nTab);//создаём диалог SendMessage(hTab,TCM_INSERTITEM,nTab,(LPARAM)&Item);//добавляем вкладку SendMessage(hTab,TCM_SETCURSEL,nTab,0);//делаем эту вкладку активной nTab++;//номер "вкладки с плюсиком" увеличился на единицу
Euler скачай neatpad18.zip отсюда http://www.catch22.net/tuts/neatpad/18 Options.c функция void ShowOptions(HWND hwndParent)
ндээ любитель отладки (скачал сорс тоже посмотреть) назвать глобальную переменную nTab и заводить еще локальную с таким же именем (это ахтунг полный) я бы глобальную как минимум обозвал nTabXXXXXXXXXXX чем длиннее и осмысленнее тем лучше вчера только баг из за этого словил удаляю переменную с текущей области видимости а прога компилируется собирается (только не работает) где то в внешней области видимости (вложенных выше блоков) такая же переменная с таким же именем (но у меня э то не специально получилось) вот и отлаживай тут можно только пожелать счастливой отладки
Bazhan, там используется Propery Sheet- это совсем другой контрол. "ндээ любитель рассказывать истории", естественно я случайно переменные одинаково обозвал(обычно глобальные имеют префикс g_).