|
|
Строка 6: |
Строка 6: |
| | | |
| Без помощи визарда (Wizard) это можно сделать переопределением виртуальной функции OnCommand() : | | Без помощи визарда (Wizard) это можно сделать переопределением виртуальной функции OnCommand() : |
− | <syntaxhighlight>BOOL CMyDialog::OnCommand(WPARAM wParam, LPARAM lParam) | + | <syntaxhighlight> |
| + | BOOL CMyDialog::OnCommand(WPARAM wParam, LPARAM lParam) |
| { | | { |
− | WORD wMess=(wParam>>16);//командное сообщение
| + | WORD wMess=(wParam>>16);//командное сообщение |
− | int nID=(int)(wParam &0x0000ffff));//ID контрола
| + | int nID=(int)(wParam &0x0000ffff));//ID контрола |
− | HWND hW=(HWND)lParam;//хендл контрола
| + | HWND hW=(HWND)lParam;//хендл контрола |
− |
| + | |
− | //смотрим, какой контрол
| + | //смотрим, какой контрол |
− | switch(nID)
| + | switch(nID) |
− | {
| + | { |
− | //кнопки
| + | //кнопки |
− | case ID_BN1:
| + | case ID_BN1: |
− | case ID_BN2:
| + | case ID_BN2: |
− | case ID_BN3:
| + | case ID_BN3: |
− | {
| + | { |
− | //смотрим, какое сообщение
| + | //смотрим, какое сообщение |
− | switch(wMess)
| + | switch(wMess) |
− | {
| + | { |
− | case BN_CLICKED:{ ... }break;
| + | case BN_CLICKED:{ ... }break; |
− | }
| + | } |
− | }
| + | } |
− | break;
| + | break; |
− |
| + | |
− | //едиты
| + | //едиты |
− | case ID_ED1:
| + | case ID_ED1: |
− | case ID_ED2:
| + | case ID_ED2: |
− | case ID_ED3:
| + | case ID_ED3: |
− | case ID_ED4:
| + | case ID_ED4: |
− | {
| + | { |
− | //смотрим, какое сообщение
| + | //смотрим, какое сообщение |
− | switch(wMess)
| + | switch(wMess) |
− | {
| + | { |
− | case EN_CHANGE:{ ... }break;
| + | case EN_CHANGE:{ ... }break; |
− | case EN_KILLFOCUS:{ ... }break;
| + | case EN_KILLFOCUS:{ ... }break; |
− | }
| + | } |
− | }
| + | } |
− | break;
| + | break; |
− | }
| + | } |
− |
| + | |
− | return CDialog::OnCommand(wParam, lParam);
| + | return CDialog::OnCommand(wParam, lParam); |
| } | | } |
| </syntaxhighlight> | | </syntaxhighlight> |
− | === Когда запускаю программу, то все надписи на русском языке теряются - показываются вопросики. Что делать? ===
| |
| | | |
− | Лечится так: непосредственно после создания проекта открываем дерево ресурсов и в свойствах каждого элемента дерева ставим язык Russian. Если этого не сделать сразу, то все русские буквы при компиляции ресурсов потеряются.
| + | === Когда я запускаю программу, все надписи на русском языке теряются - показываются вопросики. Что делать? === |
| | | |
− | === Как в проекте VC6 MFC получить путь, откуда запущен ЕХЕ? ===
| + | Лечится проблема так: непосредственно после создания проекта открываем дерево ресурсов и в свойствах каждого элемента дерева ставим язык Russian. Если этого не сделать сразу, то все русские буквы при компиляции ресурсов потеряются. |
| | | |
− | Использовать GetModuleFileName():
| + | === Как в проекте VC6 MFC программно получить путь, откуда был запущен экзешник (исполняемый модуль) самой программы? === |
− | <syntaxhighlight> TCHAR pszFileName[MAX_PATH]; | + | |
− | pszFileName[0]=0;
| + | Нужно использовать функцию GetModuleFileName(): |
− | GetModuleFileName(NULL, pszFileName, MAX_PATH);
| + | <syntaxhighlight> |
− | CString stModulePath = pszFileName;
| + | TCHAR pszFileName[MAX_PATH]; |
− | //ищем первый слеш с конца и удаляем
| + | pszFileName[0]=0; |
− | //его вместе с именем файла EXE
| + | GetModuleFileName(NULL, pszFileName, MAX_PATH); |
− | int nEnd = stModulePath.ReverseFind('\\');
| + | CString stModulePath = pszFileName; |
− | stModulePath.Delete(nEnd, stModulePath.GetLength()-nEnd);
| + | //ищем первый слеш с конца и удаляем |
− |
| + | //его вместе с именем файла EXE |
− | //stModulePath - содержит путь
| + | int nEnd = stModulePath.ReverseFind('\\'); |
| + | stModulePath.Delete(nEnd, stModulePath.GetLength()-nEnd); |
| + | |
| + | //stModulePath - содержит путь |
| </syntaxhighlight> | | </syntaxhighlight> |
− | === Как получить доступ к контролам на панели CReBar, принадлежащей классу MainFrame? === | + | |
− | <syntaxhighlight>#include "MainFrm.h" | + | === Как получить доступ к элементам управления панели CReBar, принадлежащей классу MainFrame? === |
− |
| + | |
| + | <syntaxhighlight> |
| + | #include "MainFrm.h" |
| + | |
| //CMyApp - класс вашего приложения. theApp - глобальная переменная, | | //CMyApp - класс вашего приложения. theApp - глобальная переменная, |
| //поэтому для доступа к ней используем extern | | //поэтому для доступа к ней используем extern |
Строка 74: |
Строка 80: |
| void CMyView::F() | | void CMyView::F() |
| { | | { |
− | //Получаем главное окно приложения в любом месте программы
| + | //Получаем главное окно приложения в любом месте программы |
− | CMainFrame* pMainFrame=(CMainFrame*)(theApp.m_pMainWnd);
| + | CMainFrame* pMainFrame=(CMainFrame*)(theApp.m_pMainWnd); |
− | pMainFrame->m_wndDlgBar ....//Делаем что хотим
| + | |
− | ...
| + | pMainFrame->m_wndDlgBar ....//Делаем что хотим |
| + | ... |
| } | | } |
| </syntaxhighlight> | | </syntaxhighlight> |
| + | |
| === Как загрузить и показать один из стандартных курсоров? === | | === Как загрузить и показать один из стандартных курсоров? === |
− | <syntaxhighlight>HCURSOR hCursor; | + | |
| + | <syntaxhighlight> |
| + | HCURSOR hCursor; |
| hCursor=AfxGetApp()->LoadStandardCursor(IDC_UPARROW); | | hCursor=AfxGetApp()->LoadStandardCursor(IDC_UPARROW); |
| if(hCursor)SetCursor(hCursor); | | if(hCursor)SetCursor(hCursor); |
| </syntaxhighlight> | | </syntaxhighlight> |
− | идентификаторы стандартных курсоров: IDC_ARROW IDC_IBEAM IDC_WAIT IDC_CROSS IDC_UPARROW IDC_SIZENWSE IDC_SIZENESW IDC_SIZEWE IDC_SIZENS IDC_SIZEALL | + | идентификаторы стандартных курсоров: |
| + | IDC_ARROW |
| + | IDC_IBEAM |
| + | IDC_WAIT |
| + | IDC_CROSS |
| + | IDC_UPARROW |
| + | IDC_SIZENWSE |
| + | IDC_SIZENESW |
| + | IDC_SIZEWE |
| + | IDC_SIZENS |
| + | IDC_SIZEALL |
| | | |
− | === Как запретить пользователю закрыть программу нажатием на крестик? === | + | === Как запретить пользователю закрыть программу нажатием на кнопку с крестиком? === |
| | | |
− | Нужно добавить обработчик сообщений WM_CLOSE - OnClose() - в главное окно программы. Для диалоговых приложений - это главный диалог, для одно- и много-документных - это CMainFrame.
| + | Для этого нужно добавить обработчик сообщения WM_CLOSE ( функция OnClose() в MFC) в главное окно программы. Для диалоговых приложений такое окно - это главный диалог, для одно- и много-документных приложений - это CMainFrame. |
− | <syntaxhighlight>void CMainFrame::OnClose() | + | <syntaxhighlight> |
| + | void CMainFrame::OnClose() |
| { | | { |
− | if(......)
| + | if(......) |
− | {
| + | { |
− | //не разрешаем закрыть
| + | //не разрешаем закрыть |
− | return;
| + | return; |
− | }
| + | } |
− |
| + | |
− | CFrameWnd::OnClose();
| + | CFrameWnd::OnClose(); |
| } | | } |
| </syntaxhighlight> | | </syntaxhighlight> |
− | === Как создать на диалоге группу RadioButton-ов и как задать порядок их обхода клавишей Tab? ===
| |
| | | |
− | Кладём на форму N контролов RadioButton. Затем у первого из группы ставим свойство Group, у остальных в группе - убираем это свойство. Порядок обхода (Tab Order) задаётся так: нажимаем Ctrl+D (загораются номера таб-порядка). Затем щёлкаем элементы в группе в таком порядке, который требуется.
| + | === Как создать на диалоге группу элементов "RadioButton" и как задать порядок их обхода клавишей Tab? === |
| | | |
− | === Где лучше устанавливать начальные значения CComboBox? ===
| + | Последовательность действий следующая: |
| + | 1) кладём на форму нужное количество элементов RadioButton. |
| + | 2) у первого элемента из группы ставим свойство Group, у остальных в группе - убираем это свойство. |
| + | 3) порядок обхода (Tab Order) задаётся так: нажимаем Ctrl+D (загораются номера таб-порядка). Затем щёлкаем элементы в группе в таком порядке, который требуется. |
| | | |
− | 1) В визарде (новая строка данных - Ctrl+Enter)
| + | === Где лучше устанавливать начальные значения элемента CComboBox? === |
| | | |
− | 2) В функции OnInitDialog (для диалога) или OnInitialUpdate (для CView) | + | Это можно сделать парой способов: |
| + | |
| + | 1) В редакторе форм - открыть свойства элемента CComboBox , "данные" (для ввода очередной строки данныхых нажать Ctrl+Enter) |
| + | 2) В функции OnInitDialog (в случае диалога) или в функции OnInitialUpdate (для CView) |
| | | |
| === Как перевести RichEdit в режим замены символов? === | | === Как перевести RichEdit в режим замены символов? === |
| | | |
− | 1) Программно, зная хендл контрола (hWnd):
| + | Имеется несколько способов. |
| | | |
− | ::PostMessage(hWnd,WM_KEYDOWN,VK_INSERT,1); | + | 1) Программно, если известен хендл элемента (hWnd), это делается так: |
| + | <syntaxhighlight> |
| + | //помещаем в конец очереди сообющений контрола сообщение WM_KEYDOWN |
| + | //с нужными параметрами |
| + | ::PostMessage(hWnd,WM_KEYDOWN,VK_INSERT,1); |
| + | </syntaxhighlight> |
| | | |
− | 2) Пользователь может нажать Insert. | + | 2) Пользователь во время работы может нажать клавишу Insert. |
| | | |
− | === Как вызвать метод класса CMainFrame (главное окно) из любого места программы? === | + | === Как вызвать метод главного окна (если используется класс CMainFrame) из любого места программы? === |
| | | |
− | AfxGetApp()->m_pMainWnd-> ...;
| + | Это можно сделать так: |
| | | |
− | === Как запретить появление полос прокруток на CFormView, когда пользователь делает размер главного окна меньше размера окна CFormView ? ===
| + | <syntaxhighlight> |
| + | AfxGetApp()->m_pMainWnd-> ...; |
| + | </syntaxhighlight> |
| | | |
− | методом SetScaleToFitSize(): | + | или так |
− | <syntaxhighlight>void CMyView::OnInitialUpdate() | + | <syntaxhighlight> |
| + | extern CMyAppXXX theApp;//здесь CMyAppXXX - название класса вашего приложения |
| + | theApp.m_pMainWnd-> ...; |
| + | </syntaxhighlight> |
| + | |
| + | === Как запретить появление полос прокруток на форме класса CFormView, когда пользователь делает размер главного окна меньше размера формы ? === |
| + | |
| + | Это можно сделать методом SetScaleToFitSize(): |
| + | <syntaxhighlight> |
| + | void CMyView::OnInitialUpdate() |
| { | | { |
− | CFormView::OnInitialUpdate();
| + | CFormView::OnInitialUpdate(); |
− | /////////
| + | |
− | GetParentFrame()->RecalcLayout();
| + | //скрываем полосы прокрутки |
− | ResizeParentToFit();
| + | GetParentFrame()->RecalcLayout(); |
− | SIZE s={0,0};
| + | ResizeParentToFit();//это уберёт полосы прокрутки со вьюхи |
− | SetScaleToFitSize(s);
| + | SIZE s={0,0}; |
− | /////////
| + | SetScaleToFitSize(s); |
− | ...
| + | //далее вызовется обработчик OnPaint(), о котором ниже |
− | ...
| + | ///////// |
| + | ... |
| + | ... |
| } | | } |
| </syntaxhighlight> | | </syntaxhighlight> |
| + | |
| + | Также обратите внимание на одну особенность: в дебаг-версии программы вызов OnPaint после выполнения SetScaleToFitSize() с параметром s={0,0} происходит с ошибкой (программа при этом завершается). |
| + | Обходится это так: |
| + | <syntaxhighlight> |
| + | void CMyView::OnPaint() |
| + | { |
| + | #ifdef _DEBUG |
| + | CPaintDC dc(this); |
| + | #else |
| + | CFormView::OnPaint(); |
| + | #endif |
| + | } |
| + | </syntaxhighlight> |
| + | |
| + | или даже вообще так: |
| + | <syntaxhighlight> |
| + | void CMyView::OnPaint() |
| + | { |
| + | CPaintDC dc(this); |
| + | } |
| + | </syntaxhighlight> |
| + | |
| === Как нарисовать прямоугольник с вертикальным цветовым градиентом? === | | === Как нарисовать прямоугольник с вертикальным цветовым градиентом? === |
| | | |
− | pdc - указатель на контекст устройства pSize - указатель на структуру SIZE с размером прямоугольника dwdColor1, dwdColor2 - начальный и конечный цвет bySteps - количество шагов градиента (1...255) | + | Нужно задасться граничными значениями цветов, затем равномерно нарисовать несколько прямоугольников постепенно меняющегося цвета. Количество прямоугольников (а, значит, плавность гралдиента) задаётся точностью. |
− | <syntaxhighlight>//вертикальный градиент
| + | Пример: |
| + | <syntaxhighlight> |
| + | //вертикальный градиент |
| + | //pdc - указатель на контекст устройства |
| + | //pSize - указатель на структуру |
| + | //SIZE с размером прямоугольника |
| + | // dwdColor1, dwdColor2 - начальный и конечный цвет |
| + | //bySteps - количество шагов градиента (1...255) |
| void sFillVertGradientRect(CDC* pdc,SIZE *pSize, COLORREF dwdColor1, COLORREF dwdColor2,BYTE bySteps) | | void sFillVertGradientRect(CDC* pdc,SIZE *pSize, COLORREF dwdColor1, COLORREF dwdColor2,BYTE bySteps) |
| { | | { |
− | if(!bySteps)bySteps=1;
| + | if(!bySteps)bySteps=1; |
− | WORD i;
| + | WORD i; |
− |
| + | |
− | long W,H,x1,x2;
| + | long W,H,x1,x2; |
− | BYTE R1,G1,B1,R2,G2,B2;
| + | BYTE R1,G1,B1,R2,G2,B2; |
− | float dh,dR,dG,dB,y1,y2,Rc,Gc,Bc;
| + | float dh,dR,dG,dB,y1,y2,Rc,Gc,Bc; |
− |
| + | |
− | //ширина и высота
| + | //ширина и высота |
− | W=pSize->cx;
| + | W=pSize->cx; |
− | H=pSize->cy;
| + | H=pSize->cy; |
− |
| + | |
− | //раскладываем цвета на их составляющие
| + | //раскладываем цвета на их составляющие |
− | R1=(BYTE)((dwdColor1&0x000000ff));
| + | //для удобства дальнейших вычислений |
− | G1=(BYTE)((dwdColor1&0x0000ff00)>>8);
| + | R1=(BYTE)((dwdColor1&0x000000ff)); |
− | B1=(BYTE)((dwdColor1&0x00ff0000)>>16);
| + | G1=(BYTE)((dwdColor1&0x0000ff00)>>8); |
− | R2=(BYTE)((dwdColor2&0x000000ff));
| + | B1=(BYTE)((dwdColor1&0x00ff0000)>>16); |
− | G2=(BYTE)((dwdColor2&0x0000ff00)>>8);
| + | R2=(BYTE)((dwdColor2&0x000000ff)); |
− | B2=(BYTE)((dwdColor2&0x00ff0000)>>16);
| + | G2=(BYTE)((dwdColor2&0x0000ff00)>>8); |
− |
| + | B2=(BYTE)((dwdColor2&0x00ff0000)>>16); |
− | //высота разноцветных прямоугольников
| + | |
− | dh=((float)H)/((float)bySteps);
| + | //высота разноцветных прямоугольников |
− | //величина шагов составляющих цветов
| + | dh=((float)H)/((float)bySteps); |
− | dR=(((float)R2)-((float)R1))/((float)bySteps);
| + | //величина шагов составляющих цветов |
− | dG=(((float)G2)-((float)G1))/((float)bySteps);
| + | dR=(((float)R2)-((float)R1))/((float)bySteps); |
− | dB=(((float)B2)-((float)B1))/((float)bySteps);
| + | dG=(((float)G2)-((float)G1))/((float)bySteps); |
− | //выводим прямоугольники
| + | dB=(((float)B2)-((float)B1))/((float)bySteps); |
− | x1=0;x2=W;y1=0;y2=dh;
| + | //выводим прямоугольники |
− | Rc=R1;Gc=G1;Bc=B1;
| + | x1=0;x2=W;y1=0;y2=dh; |
− | for(i=0;i<bySteps;i++)
| + | Rc=R1;Gc=G1;Bc=B1; |
− | {
| + | for(i=0;i<bySteps;i++) |
− | //текущий цвет
| + | { |
− | pdc->FillSolidRect(x1,(int)y1,x2-x1,(int)(y2-y1),RGB((BYTE)Rc,(BYTE)Gc,(BYTE)Bc));
| + | //текущий цвет |
− | //следующий цвет и координаты
| + | pdc->FillSolidRect(x1,(int)y1,x2-x1,(int)(y2-y1),RGB((BYTE)Rc,(BYTE)Gc,(BYTE)Bc)); |
− | y1+=dh;y2+=dh;
| + | //следующий цвет и координаты |
− | Rc+=dR;Gc+=dG;Bc+=dB;
| + | y1+=dh;y2+=dh; |
− | }
| + | Rc+=dR;Gc+=dG;Bc+=dB; |
| + | } |
| } | | } |
| </syntaxhighlight> | | </syntaxhighlight> |
| + | |
| пример вызова: | | пример вызова: |
− | <syntaxhighlight> SIZE Size={100,100}; | + | <syntaxhighlight> |
− | sFillGradientRect(&dc,&Size, RGB(200,0,0), RGB(0,200,0),10);
| + | SIZE Size={100,100}; |
| + | sFillGradientRect(&dc,&Size, RGB(200,0,0), RGB(0,200,0),10); |
| </syntaxhighlight> | | </syntaxhighlight> |
| + | |
| === Как под Windows отслеживать изменение файла? === | | === Как под Windows отслеживать изменение файла? === |
| | | |
− | Использовать функции:
| + | Нужно использовать функции: |
| | | |
| FindFirstChangeNotification | | FindFirstChangeNotification |
Строка 195: |
Строка 272: |
| FindCloseChangeNotification | | FindCloseChangeNotification |
| | | |
− | === Есть массив char[], как конвертировать его в CString? === | + | (подробности - в MSDN) |
− | <syntaxhighlight> char buf[]="text"; | + | |
− |
| + | === Как конвертировать массив char[] в CString? === |
− | //строка должна обязательно заканчиваться нулём.
| + | Это можно сделать методами самого класса CString: |
− |
| + | <syntaxhighlight> |
− | //конвертируем так
| + | char buf[]="text"; |
− | CString txt(buf);
| + | |
− |
| + | //строка должна обязательно заканчиваться нулём!!! |
− | //или так
| + | |
− | CString txt;
| + | //конвертируем так |
− | txt=buf;
| + | CString txt(buf); |
| + | |
| + | //или так |
| + | CString txt; |
| + | txt=buf; |
| </syntaxhighlight> | | </syntaxhighlight> |
| + | |
| === Как зарезервировать в CString буфер нужной длины? === | | === Как зарезервировать в CString буфер нужной длины? === |
| | | |
− | при помощи методов класса: | + | Это можно сделать при помощи методов класса: |
| | | |
− | CString::GetBuffer | + | <syntaxhighlight> |
| + | CString::GetBuffer(...) |
| + | </syntaxhighlight> |
| и | | и |
− | CString::GetBufferSetLength | + | <syntaxhighlight> |
| + | CString::GetBufferSetLength(...) |
| + | </syntaxhighlight> |
| | | |
− | Разница между CString::GetBuffer(nLen) и CString::GetBufferSetLength(nLen) в том, что первый возвращает строку не меньше заданной длины, а второй возвращает строку точно равную заданной длине. Обе могут перераспределять память если надо. В обычных случаях лучше GetBuffer. | + | Разница между GetBuffer(nLen) и GetBufferSetLength(nLen) в том, что первый возвращает строку НЕ МЕНЬШЕ заданной длины, а второй возвращает строку точно равную заданной длине. Обе могут перераспределять память если надо. В обычных случаях лучше использовать GetBuffer. |
| | | |
| Если содержимое буфера менялось, то после этого нужно вызвать CString::ReleaseBuffer с указанием новой длины. Значение -1 в вызове CString::ReleaseBuffer означает, что длина строки будет вычислена автоматом (функцией strlen) в методе."-1" удобно использовать, если известно, что строка заканчивается нулем. | | Если содержимое буфера менялось, то после этого нужно вызвать CString::ReleaseBuffer с указанием новой длины. Значение -1 в вызове CString::ReleaseBuffer означает, что длина строки будет вычислена автоматом (функцией strlen) в методе."-1" удобно использовать, если известно, что строка заканчивается нулем. |
Строка 221: |
Строка 307: |
| === Как передать больше одного параметр в процедуру потока? === | | === Как передать больше одного параметр в процедуру потока? === |
| | | |
− | Определить структуру с указателями на всё любое, например:
| + | Для этого нужно определить структуру со всеми параметрами (или указателями на них), которые нужно передать. А в процедуру потока передать лишь указатель на заполненную структуру. |
− | <syntaxhighlight>struct mystr | + | Пример: |
| + | <syntaxhighlight> |
| + | struct mystr |
| { | | { |
− | CEdit* pEd;
| + | CEdit* pEd; |
− | CDialog* pDlg;
| + | CDialog* pDlg; |
− | DWORD* pdwd;
| + | DWORD* pdwd; |
− | int *pn;
| + | int *pn; |
| }; | | }; |
| </syntaxhighlight> | | </syntaxhighlight> |
| + | |
| запуск потока: | | запуск потока: |
− | <syntaxhighlight>mystr *pparam=new mystr;//экземпляр не должен быть временным!!! | + | |
| + | <syntaxhighlight> |
| + | mystr *pparam=new mystr;//экземпляр не должен быть временным!!! |
| + | |
| memset(pparam,0,sizeof(*pparam)); | | memset(pparam,0,sizeof(*pparam)); |
| pparam->pEd=...; | | pparam->pEd=...; |
Строка 237: |
Строка 329: |
| | | |
| ::AfxBeginThread(thread,pparam); | | ::AfxBeginThread(thread,pparam); |
− | //тут экземпляр *(pparam) уже нельзя использовать!!! | + | //тут экземпляр *(pparam) уже нельзя использовать в нашем примере, так как |
− | //он удалиться в потоке | + | //он у нас удалиля в процедуре потока |
| </syntaxhighlight> | | </syntaxhighlight> |
− | в потоке:
| + | |
− | <syntaxhighlight>//поток: | + | процедура потока: |
| + | <syntaxhighlight> |
| + | //поток: |
| UINT threadLoader(LPVOID pParam) | | UINT threadLoader(LPVOID pParam) |
| { | | { |
− | mystr data=*((mystr*)pParam);
| + | //копируем данные из структуры в локальную структуру |
− | delete ((mystr*)pParam);//подчищаем память
| + | mystr data=*((mystr*)pParam); |
| + | //освобождаем память временной структуры |
| + | delete ((mystr*)pParam); |
| + | pParam=0; |
| + | |
| | | |
− | ...
| + | ... |
− | data.pDlg->...;
| + | data.pDlg->...; |
− | (*data.pdwd)=...;
| + | (*data.pdwd)=...; |
− | ...
| + | ... |
| } | | } |
| </syntaxhighlight> | | </syntaxhighlight> |
− | === Как убрать главное меню из CMainFrame? === | + | |
− | <syntaxhighlight>BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) | + | === Как убрать главное меню из окна CMainFrame? === |
| + | Это можно сделать в виртуальной функции PreCreateWindow: |
| + | <syntaxhighlight> |
| + | BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) |
| { | | { |
− | //обнуляем хендл меню до вызова CFrameWnd::PreCreateWindow
| + | //обнуляем хендл меню до вызова CFrameWnd::PreCreateWindow |
− | cs.hMenu = 0;
| + | cs.hMenu = 0; |
− |
| + | |
− | if(!CFrameWnd::PreCreateWindow(cs))
| + | if(!CFrameWnd::PreCreateWindow(cs)) |
− | return FALSE;
| + | return FALSE; |
− | ...
| + | ... |
− | ...
| + | ... |
| } | | } |
| </syntaxhighlight> | | </syntaxhighlight> |
− | === Как работающая программа может определить, что юзер завершает работу Windows? ===
| |
| | | |
− | В этот момент всем процессам посылается сообщение WM_QUERYENDSESSION - его и нужно отловить в обработчике OnQueryEndSession(). Если вернуть из обработчика значение 0, то Windows продолжит работу.
| + | === Как работающая программа может определить, что пользователь завершает работу Windows? === |
| + | |
| + | Когда пользователь завершает работу Windows, всем процессам посылается сообщение WM_QUERYENDSESSION. Его нужно отловить в обработчике OnQueryEndSession(). Если вернуть из обработчика значение 0, то Windows продолжит работу. |
| | | |
| === Как сделать всплывающую подсказку для класса CWnd и классов, от него производных? === | | === Как сделать всплывающую подсказку для класса CWnd и классов, от него производных? === |
| | | |
− | Допустим, имеется диалог класса CMyDlg. Делаем подсказки для контролов. (для CStatic контролов не забудьте поставить свойство Notify) | + | Допустим, имеется диалог класса CMyDlg. Делаем подсказки для элементов управления (для CStatic контролов не забудьте поставить свойство Notify) : |
− | <syntaxhighlight>class CMyDlg:puplic CDialog | + | <syntaxhighlight> |
| + | class CMyDlg:puplic CDialog |
| { | | { |
− | CToolTipCtrl m_ToolTip;//мембер класса CMyDlg
| + | CToolTipCtrl m_ToolTip;//мембер класса CMyDlg |
− | //
| + | |
| }; | | }; |
| | | |
Строка 282: |
Строка 384: |
| struct{int ID;const char* pch;} m_a_Tips[]= | | struct{int ID;const char* pch;} m_a_Tips[]= |
| { | | { |
− | {IDC_BUTTON1,"КЫнопка"},
| + | {IDC_BUTTON1,"Кнопка"}, |
− | {IDC_STATIC1,"Текст"},
| + | {IDC_STATIC1,"Текст"}, |
− | //
| + | // |
− | {0,0},//признак конца массива
| + | {0,0},//признак конца массива |
| }; | | }; |
| | | |
Строка 292: |
Строка 394: |
| BOOL CMyDlg::OnInitDialog() | | BOOL CMyDlg::OnInitDialog() |
| { | | { |
− | CDialog::OnInitDialog();
| + | CDialog::OnInitDialog(); |
− | //
| + | |
− | //создаём
| + | //создаём элемент TOOLTIP |
− | m_ToolTip.Create(this);
| + | m_ToolTip.Create(this); |
− | //Привязка подсказок
| + | |
− | for(int i=0; m_a_Tips[i].ID; i++)
| + | //Привязка подсказок |
− | {
| + | for(int i=0; m_a_Tips[i].ID; i++) |
− | m_ToolTip.AddTool(
| + | { |
− | GetDlgItem(m_a_Tips[i].ID),
| + | m_ToolTip.AddTool( |
− | m_a_Tips[i].pch);
| + | GetDlgItem(m_a_Tips[i].ID), |
− | }
| + | m_a_Tips[i].pch |
− |
| + | ); |
− | //включаем показ подсказок
| + | } |
− | m_ToolTip.Activate(1);
| + | |
− | ...
| + | //включаем показ подсказок |
− | ...
| + | m_ToolTip.Activate(1); |
| + | ... |
| + | ... |
| } | | } |
| | | |
Строка 315: |
Строка 419: |
| BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) | | BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) |
| { | | { |
− | //транслируем
| + | //транслируем |
− | if(m_ToolTip.m_hWnd)m_ToolTip.RelayEvent(pMsg);
| + | if(m_ToolTip.m_hWnd)m_ToolTip.RelayEvent(pMsg); |
− |
| + | |
− | ...
| + | return CDialog::PreTranslateMessage(pMsg); |
− | ...
| + | |
− | return CDialog::PreTranslateMessage(pMsg);
| + | |
| } | | } |
| </syntaxhighlight> | | </syntaxhighlight> |
− | === Как в отладчике VС просмотреть содержимое std::vector<string> V ===
| |
| | | |
− | В режиме отладки открываем окно "Watch" (ALT+3) и вставляем выражения:
| + | === Как в отладчике Visual С++ просмотреть содержимое std::vector<string> ?=== |
| | | |
− | V._Myfirst - будет показан первый элемент V._Myfirst+1 - второй V._Myfirst+2 - и т.д.
| + | Это можно сделать так. К примеру, имеется |
| + | <syntaxhighlight> |
| + | std::vector<string> V; |
| + | </syntaxhighlight> |
| | | |
− | === Я вывожу на контекст устройства текст. Как определить в пикселах ширину и высоту выведенных символов текста? ===
| + | режиме отладки открываем окно "Watch" (ALT+3) и вставляем выражения: |
| | | |
− | использовать процедуру API: | + | V._Myfirst (- будет показан первый элемент V) |
− | <syntaxhighlight>BOOL GetTextExtentPoint32( | + | V._Myfirst+1 (- второй элемент V,) |
− | HDC hdc,// хендл контекста
| + | |
− | LPCTSTR lpString,// выводимая строка
| + | и т.д. |
− | int cbString,// длина строки в символах
| + | |
− | LPSIZE lpSize// указатель на структуру SIZE, куда
| + | === Как при выводе текста на контекст устройства определить ширину и высоту выведенных символов текста в пикселах? === |
− | //будут помещены размеры
| + | |
| + | Для этого нужно использовать процедуру API: |
| + | <syntaxhighlight> |
| + | BOOL GetTextExtentPoint32( |
| + | HDC hdc,// хендл контекста |
| + | LPCTSTR lpString,// выводимая строка |
| + | int cbString,// длина строки в символах |
| + | LPSIZE lpSize// указатель на структуру SIZE, куда |
| + | //будут помещены размеры |
| ); | | ); |
| </syntaxhighlight> | | </syntaxhighlight> |
| + | |
| + | Функция вычисляет длину лишь одной символов, оканчивающейся нулём. Поэтому, чтобы вычислить "размер" многострочнокго текста, текст вначале необходимо разбить на строки, разделённые символами '\r' и '\n', и определить ширину и высоту каждой отдельно взятой строки. |
| + | |
| [[Category:FAQ]] | | [[Category:FAQ]] |
Версия 20:10, 8 октября 2008
Как сделать обработчик сообщения для нескольких контролов (элементов управления) сразу?
Без помощи визарда (Wizard) это можно сделать переопределением виртуальной функции OnCommand() :
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
BOOL CMyDialog::OnCommand(WPARAM wParam, LPARAM lParam)
{
WORD wMess=(wParam>>16);//командное сообщение
int nID=(int)(wParam &0x0000ffff));//ID контрола
HWND hW=(HWND)lParam;//хендл контрола
//смотрим, какой контрол
switch(nID)
{
//кнопки
case ID_BN1:
case ID_BN2:
case ID_BN3:
{
//смотрим, какое сообщение
switch(wMess)
{
case BN_CLICKED:{ ... }break;
}
}
break;
//едиты
case ID_ED1:
case ID_ED2:
case ID_ED3:
case ID_ED4:
{
//смотрим, какое сообщение
switch(wMess)
{
case EN_CHANGE:{ ... }break;
case EN_KILLFOCUS:{ ... }break;
}
}
break;
}
return CDialog::OnCommand(wParam, lParam);
}
Когда я запускаю программу, все надписи на русском языке теряются - показываются вопросики. Что делать?
Лечится проблема так: непосредственно после создания проекта открываем дерево ресурсов и в свойствах каждого элемента дерева ставим язык Russian. Если этого не сделать сразу, то все русские буквы при компиляции ресурсов потеряются.
Как в проекте VC6 MFC программно получить путь, откуда был запущен экзешник (исполняемый модуль) самой программы?
Нужно использовать функцию GetModuleFileName():
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
TCHAR pszFileName[MAX_PATH];
pszFileName[0]=0;
GetModuleFileName(NULL, pszFileName, MAX_PATH);
CString stModulePath = pszFileName;
//ищем первый слеш с конца и удаляем
//его вместе с именем файла EXE
int nEnd = stModulePath.ReverseFind('\\');
stModulePath.Delete(nEnd, stModulePath.GetLength()-nEnd);
//stModulePath - содержит путь
Как получить доступ к элементам управления панели CReBar, принадлежащей классу MainFrame?
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
#include "MainFrm.h"
//CMyApp - класс вашего приложения. theApp - глобальная переменная,
//поэтому для доступа к ней используем extern
extern CMyApp theApp;
void CMyView::F()
{
//Получаем главное окно приложения в любом месте программы
CMainFrame* pMainFrame=(CMainFrame*)(theApp.m_pMainWnd);
pMainFrame->m_wndDlgBar ....//Делаем что хотим
...
}
Как загрузить и показать один из стандартных курсоров?
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
HCURSOR hCursor;
hCursor=AfxGetApp()->LoadStandardCursor(IDC_UPARROW);
if(hCursor)SetCursor(hCursor);
идентификаторы стандартных курсоров:
IDC_ARROW
IDC_IBEAM
IDC_WAIT
IDC_CROSS
IDC_UPARROW
IDC_SIZENWSE
IDC_SIZENESW
IDC_SIZEWE
IDC_SIZENS
IDC_SIZEALL
Как запретить пользователю закрыть программу нажатием на кнопку с крестиком?
Для этого нужно добавить обработчик сообщения WM_CLOSE ( функция OnClose() в MFC) в главное окно программы. Для диалоговых приложений такое окно - это главный диалог, для одно- и много-документных приложений - это CMainFrame.
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
void CMainFrame::OnClose()
{
if(......)
{
//не разрешаем закрыть
return;
}
CFrameWnd::OnClose();
}
Как создать на диалоге группу элементов "RadioButton" и как задать порядок их обхода клавишей Tab?
Последовательность действий следующая:
1) кладём на форму нужное количество элементов RadioButton.
2) у первого элемента из группы ставим свойство Group, у остальных в группе - убираем это свойство.
3) порядок обхода (Tab Order) задаётся так: нажимаем Ctrl+D (загораются номера таб-порядка). Затем щёлкаем элементы в группе в таком порядке, который требуется.
Где лучше устанавливать начальные значения элемента CComboBox?
Это можно сделать парой способов:
1) В редакторе форм - открыть свойства элемента CComboBox , "данные" (для ввода очередной строки данныхых нажать Ctrl+Enter)
2) В функции OnInitDialog (в случае диалога) или в функции OnInitialUpdate (для CView)
Как перевести RichEdit в режим замены символов?
Имеется несколько способов.
1) Программно, если известен хендл элемента (hWnd), это делается так:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
//помещаем в конец очереди сообющений контрола сообщение WM_KEYDOWN
//с нужными параметрами
::PostMessage(hWnd,WM_KEYDOWN,VK_INSERT,1);
2) Пользователь во время работы может нажать клавишу Insert.
Как вызвать метод главного окна (если используется класс CMainFrame) из любого места программы?
Это можно сделать так:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
AfxGetApp()->m_pMainWnd-> ...;
или так
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
extern CMyAppXXX theApp;//здесь CMyAppXXX - название класса вашего приложения
theApp.m_pMainWnd-> ...;
Как запретить появление полос прокруток на форме класса CFormView, когда пользователь делает размер главного окна меньше размера формы ?
Это можно сделать методом SetScaleToFitSize():
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
void CMyView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
//скрываем полосы прокрутки
GetParentFrame()->RecalcLayout();
ResizeParentToFit();//это уберёт полосы прокрутки со вьюхи
SIZE s={0,0};
SetScaleToFitSize(s);
//далее вызовется обработчик OnPaint(), о котором ниже
/////////
...
...
}
Также обратите внимание на одну особенность: в дебаг-версии программы вызов OnPaint после выполнения SetScaleToFitSize() с параметром s={0,0} происходит с ошибкой (программа при этом завершается).
Обходится это так:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
void CMyView::OnPaint()
{
#ifdef _DEBUG
CPaintDC dc(this);
#else
CFormView::OnPaint();
#endif
}
или даже вообще так:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
void CMyView::OnPaint()
{
CPaintDC dc(this);
}
Как нарисовать прямоугольник с вертикальным цветовым градиентом?
Нужно задасться граничными значениями цветов, затем равномерно нарисовать несколько прямоугольников постепенно меняющегося цвета. Количество прямоугольников (а, значит, плавность гралдиента) задаётся точностью.
Пример:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
//вертикальный градиент
//pdc - указатель на контекст устройства
//pSize - указатель на структуру
//SIZE с размером прямоугольника
// dwdColor1, dwdColor2 - начальный и конечный цвет
//bySteps - количество шагов градиента (1...255)
void sFillVertGradientRect(CDC* pdc,SIZE *pSize, COLORREF dwdColor1, COLORREF dwdColor2,BYTE bySteps)
{
if(!bySteps)bySteps=1;
WORD i;
long W,H,x1,x2;
BYTE R1,G1,B1,R2,G2,B2;
float dh,dR,dG,dB,y1,y2,Rc,Gc,Bc;
//ширина и высота
W=pSize->cx;
H=pSize->cy;
//раскладываем цвета на их составляющие
//для удобства дальнейших вычислений
R1=(BYTE)((dwdColor1&0x000000ff));
G1=(BYTE)((dwdColor1&0x0000ff00)>>8);
B1=(BYTE)((dwdColor1&0x00ff0000)>>16);
R2=(BYTE)((dwdColor2&0x000000ff));
G2=(BYTE)((dwdColor2&0x0000ff00)>>8);
B2=(BYTE)((dwdColor2&0x00ff0000)>>16);
//высота разноцветных прямоугольников
dh=((float)H)/((float)bySteps);
//величина шагов составляющих цветов
dR=(((float)R2)-((float)R1))/((float)bySteps);
dG=(((float)G2)-((float)G1))/((float)bySteps);
dB=(((float)B2)-((float)B1))/((float)bySteps);
//выводим прямоугольники
x1=0;x2=W;y1=0;y2=dh;
Rc=R1;Gc=G1;Bc=B1;
for(i=0;i<bySteps;i++)
{
//текущий цвет
pdc->FillSolidRect(x1,(int)y1,x2-x1,(int)(y2-y1),RGB((BYTE)Rc,(BYTE)Gc,(BYTE)Bc));
//следующий цвет и координаты
y1+=dh;y2+=dh;
Rc+=dR;Gc+=dG;Bc+=dB;
}
}
пример вызова:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
SIZE Size={100,100};
sFillGradientRect(&dc,&Size, RGB(200,0,0), RGB(0,200,0),10);
Как под Windows отслеживать изменение файла?
Нужно использовать функции:
FindFirstChangeNotification
FindNextChangeNotification
FindCloseChangeNotification
(подробности - в MSDN)
Как конвертировать массив char[] в CString?
Это можно сделать методами самого класса CString:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
char buf[]="text";
//строка должна обязательно заканчиваться нулём!!!
//конвертируем так
CString txt(buf);
//или так
CString txt;
txt=buf;
Как зарезервировать в CString буфер нужной длины?
Это можно сделать при помощи методов класса:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
CString::GetBuffer(...)
и
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
CString::GetBufferSetLength(...)
Разница между GetBuffer(nLen) и GetBufferSetLength(nLen) в том, что первый возвращает строку НЕ МЕНЬШЕ заданной длины, а второй возвращает строку точно равную заданной длине. Обе могут перераспределять память если надо. В обычных случаях лучше использовать GetBuffer.
Если содержимое буфера менялось, то после этого нужно вызвать CString::ReleaseBuffer с указанием новой длины. Значение -1 в вызове CString::ReleaseBuffer означает, что длина строки будет вычислена автоматом (функцией strlen) в методе."-1" удобно использовать, если известно, что строка заканчивается нулем.
Как передать больше одного параметр в процедуру потока?
Для этого нужно определить структуру со всеми параметрами (или указателями на них), которые нужно передать. А в процедуру потока передать лишь указатель на заполненную структуру.
Пример:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
struct mystr
{
CEdit* pEd;
CDialog* pDlg;
DWORD* pdwd;
int *pn;
};
запуск потока:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
mystr *pparam=new mystr;//экземпляр не должен быть временным!!!
memset(pparam,0,sizeof(*pparam));
pparam->pEd=...;
pparam->pdwd=...;
::AfxBeginThread(thread,pparam);
//тут экземпляр *(pparam) уже нельзя использовать в нашем примере, так как
//он у нас удалиля в процедуре потока
процедура потока:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
//поток:
UINT threadLoader(LPVOID pParam)
{
//копируем данные из структуры в локальную структуру
mystr data=*((mystr*)pParam);
//освобождаем память временной структуры
delete ((mystr*)pParam);
pParam=0;
...
data.pDlg->...;
(*data.pdwd)=...;
...
}
Как убрать главное меню из окна CMainFrame?
Это можно сделать в виртуальной функции PreCreateWindow:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
//обнуляем хендл меню до вызова CFrameWnd::PreCreateWindow
cs.hMenu = 0;
if(!CFrameWnd::PreCreateWindow(cs))
return FALSE;
...
...
}
Как работающая программа может определить, что пользователь завершает работу Windows?
Когда пользователь завершает работу Windows, всем процессам посылается сообщение WM_QUERYENDSESSION. Его нужно отловить в обработчике OnQueryEndSession(). Если вернуть из обработчика значение 0, то Windows продолжит работу.
Как сделать всплывающую подсказку для класса CWnd и классов, от него производных?
Допустим, имеется диалог класса CMyDlg. Делаем подсказки для элементов управления (для CStatic контролов не забудьте поставить свойство Notify) :
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
class CMyDlg:puplic CDialog
{
CToolTipCtrl m_ToolTip;//мембер класса CMyDlg
};
//массив, в котором перечислены идентификаторы
//контролов и тексты подсказок к ним
struct{int ID;const char* pch;} m_a_Tips[]=
{
{IDC_BUTTON1,"Кнопка"},
{IDC_STATIC1,"Текст"},
//
{0,0},//признак конца массива
};
//в инициализации диалога (хотя, в принципе,
//можно и не тут) создаём и привязываем подсказки
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//создаём элемент TOOLTIP
m_ToolTip.Create(this);
//Привязка подсказок
for(int i=0; m_a_Tips[i].ID; i++)
{
m_ToolTip.AddTool(
GetDlgItem(m_a_Tips[i].ID),
m_a_Tips[i].pch
);
}
//включаем показ подсказок
m_ToolTip.Activate(1);
...
...
}
//для того, чтобы подсказки отображались как реакция на движение
//курсора мыши, транслируем получаемые окнами сообщения в
//виртуальной PreTranslateMessage()
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
//транслируем
if(m_ToolTip.m_hWnd)m_ToolTip.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
Как в отладчике Visual С++ просмотреть содержимое std::vector<string> ?
Это можно сделать так. К примеру, имеется
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
std::vector<string> V;
режиме отладки открываем окно "Watch" (ALT+3) и вставляем выражения:
V._Myfirst (- будет показан первый элемент V)
V._Myfirst+1 (- второй элемент V,)
и т.д.
Как при выводе текста на контекст устройства определить ширину и высоту выведенных символов текста в пикселах?
Для этого нужно использовать процедуру API:
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
[развернуть]
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, aimms, algol68, apache, applescript, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, caddcl, cadlisp, cfdg, cfm, chaiscript, chapel, cil, clojure, cmake, cobol, coffeescript, cpp, csharp, css, cuesheet, d, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, j, java, java5, javascript, jcl, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, qml, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xpp, yaml, z80, zxbasic
BOOL GetTextExtentPoint32(
HDC hdc,// хендл контекста
LPCTSTR lpString,// выводимая строка
int cbString,// длина строки в символах
LPSIZE lpSize// указатель на структуру SIZE, куда
//будут помещены размеры
);
Функция вычисляет длину лишь одной символов, оканчивающейся нулём. Поэтому, чтобы вычислить "размер" многострочнокго текста, текст вначале необходимо разбить на строки, разделённые символами '\r' и '\n', и определить ширину и высоту каждой отдельно взятой строки.