FAQ:WinAPI, VCPP Part 2 — различия между версиями

Материал из Весельчак У
Перейти к: навигация, поиск
м (Удалил.)
(тег pre -> code , &, < ,&gt -> $, <, >)
Строка 3: Строка 3:
  
  
 +
=== Как сделать обработчик сообщения для нескольких контролов (элементов управления) сразу?  ===
  
 
+
Без помощи визарда (Wizard) это можно сделать переопределением виртуальной функции OnCommand() :
 
+
<syntaxhighlight>BOOL CMyDialog::OnCommand(WPARAM wParam, LPARAM lParam)  
 
+
 
+
 
+
=== Как сделать обработчик сообщения для нескольких контролов сразу?  ===
+
 
+
Если без помощи визарда, то переопределить виртуальную OnCommand()  
+
<pre>BOOL CMyDialog::OnCommand(WPARAM wParam, LPARAM lParam)  
+
 
{
 
{
WORD wMess=(wParam&gt;&gt;16);//командное сообщение
+
WORD wMess=(wParam>>16);//командное сообщение
int nID=(int)(wParam &amp;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);
 
}
 
}
</pre>
+
</syntaxhighlight>
 
=== Когда запускаю программу, то все надписи на русском языке теряются - показываются вопросики. Что делать?  ===
 
=== Когда запускаю программу, то все надписи на русском языке теряются - показываются вопросики. Что делать?  ===
  
Строка 60: Строка 54:
  
 
Использовать GetModuleFileName():  
 
Использовать GetModuleFileName():  
<pre> TCHAR pszFileName[MAX_PATH];
+
<syntaxhighlight> TCHAR pszFileName[MAX_PATH];
pszFileName[0]=0;
+
pszFileName[0]=0;
GetModuleFileName(NULL, pszFileName, MAX_PATH);
+
GetModuleFileName(NULL, pszFileName, MAX_PATH);
CString stModulePath =  pszFileName;
+
CString stModulePath =  pszFileName;
//ищем первый слеш с конца и удаляем
+
//ищем первый слеш с конца и удаляем
//его вместе с именем файла EXE
+
//его вместе с именем файла EXE
int nEnd = stModulePath.ReverseFind('\\');
+
int nEnd = stModulePath.ReverseFind('\\');
stModulePath.Delete(nEnd, stModulePath.GetLength()-nEnd);
+
stModulePath.Delete(nEnd, stModulePath.GetLength()-nEnd);
+
//stModulePath - содержит путь
+
//stModulePath - содержит путь
</pre>
+
</syntaxhighlight>
 
=== Как получить доступ к контролам на панели CReBar, принадлежащей классу MainFrame?  ===
 
=== Как получить доступ к контролам на панели CReBar, принадлежащей классу MainFrame?  ===
<pre>#include "MainFrm.h"
+
<syntaxhighlight>#include "MainFrm.h"
+
 
//CMyApp - класс вашего приложения. theApp - глобальная переменная,
 
//CMyApp - класс вашего приложения. theApp - глобальная переменная,
 
//поэтому для доступа к ней используем extern
 
//поэтому для доступа к ней используем extern
Строка 80: Строка 74:
 
void CMyView::F()
 
void CMyView::F()
 
{
 
{
//Получаем главное окно приложения в любом месте программы
+
//Получаем главное окно приложения в любом месте программы
CMainFrame* pMainFrame=(CMainFrame*)(theApp.m_pMainWnd);
+
CMainFrame* pMainFrame=(CMainFrame*)(theApp.m_pMainWnd);
pMainFrame-&gt;m_wndDlgBar ....//Делаем что хотим
+
pMainFrame->m_wndDlgBar ....//Делаем что хотим
...
+
...
 
}
 
}
</pre>
+
</syntaxhighlight>
 
=== Как загрузить и показать один из стандартных курсоров?  ===
 
=== Как загрузить и показать один из стандартных курсоров?  ===
<pre>HCURSOR hCursor;
+
<syntaxhighlight>HCURSOR hCursor;
hCursor=AfxGetApp()-&gt;LoadStandardCursor(IDC_UPARROW);
+
hCursor=AfxGetApp()->LoadStandardCursor(IDC_UPARROW);
 
if(hCursor)SetCursor(hCursor);
 
if(hCursor)SetCursor(hCursor);
</pre>
+
</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  
  
Строка 96: Строка 90:
  
 
Нужно добавить обработчик сообщений WM_CLOSE - OnClose() - в главное окно программы. Для диалоговых приложений - это главный диалог, для одно- и много-документных - это CMainFrame.  
 
Нужно добавить обработчик сообщений WM_CLOSE - OnClose() - в главное окно программы. Для диалоговых приложений - это главный диалог, для одно- и много-документных - это CMainFrame.  
<pre>void CMainFrame::OnClose()
+
<syntaxhighlight>void CMainFrame::OnClose()
 
{
 
{
if(......)
+
if(......)
{
+
{
//не разрешаем закрыть
+
  //не разрешаем закрыть
return;
+
  return;
}
+
}
+
CFrameWnd::OnClose();
+
CFrameWnd::OnClose();
 
}
 
}
</pre>
+
</syntaxhighlight>
 
=== Как создать на диалоге группу RadioButton-ов и как задать порядок их обхода клавишей Tab?  ===
 
=== Как создать на диалоге группу RadioButton-ов и как задать порядок их обхода клавишей Tab?  ===
  
Строка 127: Строка 121:
 
=== Как вызвать метод класса CMainFrame (главное окно) из любого места программы?  ===
 
=== Как вызвать метод класса CMainFrame (главное окно) из любого места программы?  ===
  
AfxGetApp()-&gt;m_pMainWnd-&gt; ...&nbsp;;  
+
AfxGetApp()->m_pMainWnd-> ...;  
  
=== Как запретить появление полос прокруток на CFormView, когда пользователь делает размер главного окна меньше размера окна CFormView&nbsp;?  ===
+
=== Как запретить появление полос прокруток на CFormView, когда пользователь делает размер главного окна меньше размера окна CFormView ?  ===
  
 
методом SetScaleToFitSize():  
 
методом SetScaleToFitSize():  
<pre>void CMyView::OnInitialUpdate()
+
<syntaxhighlight>void CMyView::OnInitialUpdate()
 
{
 
{
CFormView::OnInitialUpdate();
+
CFormView::OnInitialUpdate();
/////////
+
/////////
GetParentFrame()-&gt;RecalcLayout();
+
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
+
ResizeParentToFit();
SIZE s={0,0};
+
SIZE s={0,0};
SetScaleToFitSize(s);
+
SetScaleToFitSize(s);
/////////
+
/////////
...
+
...
...
+
...
 
}
 
}
</pre>
+
</syntaxhighlight>
 
=== Как нарисовать прямоугольник с вертикальным цветовым градиентом?  ===
 
=== Как нарисовать прямоугольник с вертикальным цветовым градиентом?  ===
  
 
pdc - указатель на контекст устройства pSize - указатель на структуру SIZE с размером прямоугольника dwdColor1, dwdColor2 - начальный и конечный цвет bySteps - количество шагов градиента (1...255)  
 
pdc - указатель на контекст устройства pSize - указатель на структуру SIZE с размером прямоугольника dwdColor1, dwdColor2 - начальный и конечный цвет bySteps - количество шагов градиента (1...255)  
<pre>//вертикальный градиент
+
<syntaxhighlight>//вертикальный градиент
 
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-&gt;cx;
+
W=pSize->cx;
H=pSize-&gt;cy;
+
H=pSize->cy;
+
//раскладываем цвета на их составляющие
+
//раскладываем цвета на их составляющие
R1=(BYTE)((dwdColor1&amp;0x000000ff));
+
R1=(BYTE)((dwdColor1&0x000000ff));
G1=(BYTE)((dwdColor1&amp;0x0000ff00)&gt;&gt;8);
+
G1=(BYTE)((dwdColor1&0x0000ff00)>>8);
B1=(BYTE)((dwdColor1&amp;0x00ff0000)&gt;&gt;16);
+
B1=(BYTE)((dwdColor1&0x00ff0000)>>16);
R2=(BYTE)((dwdColor2&amp;0x000000ff));
+
R2=(BYTE)((dwdColor2&0x000000ff));
G2=(BYTE)((dwdColor2&amp;0x0000ff00)&gt;&gt;8);
+
G2=(BYTE)((dwdColor2&0x0000ff00)>>8);
B2=(BYTE)((dwdColor2&amp;0x00ff0000)&gt;&gt;16);
+
B2=(BYTE)((dwdColor2&0x00ff0000)>>16);
+
//высота разноцветных прямоугольников
+
//высота разноцветных прямоугольников
dh=((float)H)/((float)bySteps);
+
dh=((float)H)/((float)bySteps);
//величина шагов составляющих цветов
+
//величина шагов составляющих цветов
dR=(((float)R2)-((float)R1))/((float)bySteps);
+
dR=(((float)R2)-((float)R1))/((float)bySteps);
dG=(((float)G2)-((float)G1))/((float)bySteps);
+
dG=(((float)G2)-((float)G1))/((float)bySteps);
dB=(((float)B2)-((float)B1))/((float)bySteps);
+
dB=(((float)B2)-((float)B1))/((float)bySteps);
//выводим прямоугольники
+
//выводим прямоугольники
x1=0;x2=W;y1=0;y2=dh;
+
x1=0;x2=W;y1=0;y2=dh;
Rc=R1;Gc=G1;Bc=B1;
+
Rc=R1;Gc=G1;Bc=B1;
for(i=0;i&lt;bySteps;i++)
+
for(i=0;i<bySteps;i++)
{
+
{
//текущий цвет
+
  //текущий цвет
pdc-&gt;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;
+
  y1+=dh;y2+=dh;
Rc+=dR;Gc+=dG;Bc+=dB;
+
  Rc+=dR;Gc+=dG;Bc+=dB;
}
+
}
 
}
 
}
</pre>
+
</syntaxhighlight>
 
пример вызова:  
 
пример вызова:  
<pre> SIZE Size={100,100};
+
<syntaxhighlight> SIZE Size={100,100};
sFillGradientRect(&amp;dc,&amp;Size, RGB(200,0,0), RGB(0,200,0),10);
+
sFillGradientRect(&dc,&Size, RGB(200,0,0), RGB(0,200,0),10);
</pre>
+
</syntaxhighlight>
 
=== Как под Windows отслеживать изменение файла?  ===
 
=== Как под Windows отслеживать изменение файла?  ===
  
Строка 202: Строка 196:
  
 
=== Есть массив char[], как конвертировать его в CString?  ===
 
=== Есть массив char[], как конвертировать его в CString?  ===
<pre> char buf[]="text";
+
<syntaxhighlight> char buf[]="text";
+
//строка должна обязательно заканчиваться нулём.
+
//строка должна обязательно заканчиваться нулём.
+
//конвертируем так
+
//конвертируем так
CString txt(buf);
+
CString txt(buf);
+
//или так
+
//или так
CString txt;
+
CString txt;
txt=buf;
+
txt=buf;
</pre>
+
</syntaxhighlight>
 
=== Как зарезервировать в CString буфер нужной длины?  ===
 
=== Как зарезервировать в CString буфер нужной длины?  ===
  
Строка 228: Строка 222:
  
 
Определить структуру с указателями на всё любое, например:  
 
Определить структуру с указателями на всё любое, например:  
<pre>struct mystr
+
<syntaxhighlight>struct mystr
 
{
 
{
CEdit* pEd;
+
CEdit* pEd;
CDialog* pDlg;
+
CDialog* pDlg;
DWORD* pdwd;
+
DWORD* pdwd;
int *pn;
+
int *pn;
 
};
 
};
</pre>
+
</syntaxhighlight>
 
запуск потока:  
 
запуск потока:  
<pre>mystr *pparam=new mystr;//экземпляр не должен быть временным!!!
+
<syntaxhighlight>mystr *pparam=new mystr;//экземпляр не должен быть временным!!!
 
memset(pparam,0,sizeof(*pparam));
 
memset(pparam,0,sizeof(*pparam));
pparam-&gt;pEd=...;
+
pparam->pEd=...;
pparam-&gt;pdwd=...;
+
pparam->pdwd=...;
  
 
::AfxBeginThread(thread,pparam);  
 
::AfxBeginThread(thread,pparam);  
 
//тут экземпляр *(pparam) уже нельзя использовать!!!
 
//тут экземпляр *(pparam) уже нельзя использовать!!!
 
//он удалиться в потоке
 
//он удалиться в потоке
</pre>
+
</syntaxhighlight>
 
в потоке:  
 
в потоке:  
<pre>//поток:  
+
<syntaxhighlight>//поток:  
 
UINT threadLoader(LPVOID pParam)  
 
UINT threadLoader(LPVOID pParam)  
 
{  
 
{  
mystr data=*((mystr*)pParam);
+
mystr data=*((mystr*)pParam);
delete ((mystr*)pParam);//подчищаем память
+
delete ((mystr*)pParam);//подчищаем память
  
...
+
...
data.pDlg-&gt;...;
+
data.pDlg->...;
(*data.pdwd)=...;
+
(*data.pdwd)=...;
...
+
...
 
}
 
}
</pre>
+
</syntaxhighlight>
 
=== Как убрать главное меню из CMainFrame?  ===
 
=== Как убрать главное меню из CMainFrame?  ===
<pre>BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&amp; cs)
+
<syntaxhighlight>BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
 
{
 
{
//обнуляем хендл меню до вызова CFrameWnd::PreCreateWindow
+
//обнуляем хендл меню до вызова CFrameWnd::PreCreateWindow
cs.hMenu = 0;
+
cs.hMenu = 0;
+
if(&nbsp;!CFrameWnd::PreCreateWindow(cs) )
+
if(!CFrameWnd::PreCreateWindow(cs))
return FALSE;
+
return FALSE;
...
+
...
...
+
...
 
}
 
}
</pre>
+
</syntaxhighlight>
 
=== Как работающая программа может определить, что юзер завершает работу Windows?  ===
 
=== Как работающая программа может определить, что юзер завершает работу Windows?  ===
  
Строка 278: Строка 272:
  
 
Допустим, имеется диалог класса CMyDlg. Делаем подсказки для контролов. (для CStatic контролов не забудьте поставить свойство Notify)  
 
Допустим, имеется диалог класса CMyDlg. Делаем подсказки для контролов. (для CStatic контролов не забудьте поставить свойство Notify)  
<pre>class CMyDlg:puplic CDialog
+
<syntaxhighlight>class CMyDlg:puplic CDialog
 
{
 
{
CToolTipCtrl m_ToolTip;//мембер класса CMyDlg
+
CToolTipCtrl m_ToolTip;//мембер класса CMyDlg
//
+
//
 
};
 
};
+
 
//массив, в котором перечислены идентификаторы
 
//массив, в котором перечислены идентификаторы
 
//контролов и тексты подсказок к ним
 
//контролов и тексты подсказок к ним
 
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},//признак конца массива
 
};
 
};
+
 
//в инициализации диалога (хотя, в принципе,
 
//в инициализации диалога (хотя, в принципе,
 
//можно и не тут) создаём и привязываем подсказки
 
//можно и не тут) создаём и привязываем подсказки
 
BOOL CMyDlg::OnInitDialog()  
 
BOOL CMyDlg::OnInitDialog()  
 
{
 
{
CDialog::OnInitDialog();
+
CDialog::OnInitDialog();
//
+
//
//создаём
+
//создаём
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(
+
  m_ToolTip.AddTool(
GetDlgItem(m_a_Tips[i].ID),
+
  GetDlgItem(m_a_Tips[i].ID),
m_a_Tips[i].pch);
+
  m_a_Tips[i].pch);
}
+
}
+
//включаем показ подсказок
+
//включаем показ подсказок
m_ToolTip.Activate(1);
+
m_ToolTip.Activate(1);
...
+
...
...
+
...
 
}
 
}
+
 
//для того, чтобы подсказки отображались как реакция на движение
 
//для того, чтобы подсказки отображались как реакция на движение
 
//курсора мыши, транслируем получаемые окнами сообщения в
 
//курсора мыши, транслируем получаемые окнами сообщения в
Строка 321: Строка 315:
 
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);
 
}
 
}
</pre>
+
</syntaxhighlight>
=== Как в отладчике VС просмотреть содержимое std::vector&lt;string&gt; V  ===
+
=== Как в отладчике VС просмотреть содержимое std::vector<string> V  ===
  
 
В режиме отладки открываем окно "Watch" (ALT+3) и вставляем выражения:  
 
В режиме отладки открываем окно "Watch" (ALT+3) и вставляем выражения:  
Строка 338: Строка 332:
  
 
использовать процедуру API:  
 
использовать процедуру API:  
<pre>BOOL GetTextExtentPoint32(
+
<syntaxhighlight>BOOL GetTextExtentPoint32(
HDC hdc,// хендл контекста
+
HDC hdc,// хендл контекста
LPCTSTR lpString,// выводимая строка
+
LPCTSTR lpString,// выводимая строка
int cbString,// длина строки в символах
+
int cbString,// длина строки в символах
LPSIZE lpSize// указатель на структуру SIZE, куда  
+
LPSIZE lpSize// указатель на структуру SIZE, куда  
//будут помещены размеры
+
    //будут помещены размеры
 
);
 
);
</pre>
+
</syntaxhighlight>
 
[[Category:FAQ]]
 
[[Category:FAQ]]

Версия 18:40, 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() - в главное окно программы. Для диалоговых приложений - это главный диалог, для одно- и много-документных - это 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?

Кладём на форму N контролов RadioButton. Затем у первого из группы ставим свойство Group, у остальных в группе - убираем это свойство. Порядок обхода (Tab Order) задаётся так: нажимаем Ctrl+D (загораются номера таб-порядка). Затем щёлкаем элементы в группе в таком порядке, который требуется.

Где лучше устанавливать начальные значения CComboBox?

1) В визарде (новая строка данных - Ctrl+Enter)

2) В функции OnInitDialog (для диалога) или OnInitialUpdate (для CView)

Как перевести RichEdit в режим замены символов?

1) Программно, зная хендл контрола (hWnd):

PostMessage(hWnd,WM_KEYDOWN,VK_INSERT,1);

2) Пользователь может нажать Insert.

Как вызвать метод класса CMainFrame (главное окно) из любого места программы?

AfxGetApp()->m_pMainWnd-> ...;

Как запретить появление полос прокруток на CFormView, когда пользователь делает размер главного окна меньше размера окна 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);
 /////////
 ...
 ...
}

Как нарисовать прямоугольник с вертикальным цветовым градиентом?

pdc - указатель на контекст устройства pSize - указатель на структуру SIZE с размером прямоугольника dwdColor1, dwdColor2 - начальный и конечный цвет bySteps - количество шагов градиента (1...255)

Указан неподдерживаемый язык.

Вы должны указать язык следующим образом: <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 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

Есть массив char[], как конвертировать его в 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 буфер нужной длины?

при помощи методов класса:

  CString::GetBuffer
  и
  CString::GetBufferSetLength

Разница между CString::GetBuffer(nLen) и CString::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);//подчищаем память

 ...
 data.pDlg->...;
 (*data.pdwd)=...;
 ...
}

Как убрать главное меню из 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


BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
 //обнуляем хендл меню до вызова CFrameWnd::PreCreateWindow
 cs.hMenu = 0;
 
 if(!CFrameWnd::PreCreateWindow(cs))
 return FALSE;
 ...
 ...
}

Как работающая программа может определить, что юзер завершает работу 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();
 //
 //создаём
 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);
}

Как в отладчике VС просмотреть содержимое std::vector<string> V

В режиме отладки открываем окно "Watch" (ALT+3) и вставляем выражения:

V._Myfirst - будет показан первый элемент V._Myfirst+1 - второй V._Myfirst+2 - и т.д.

Я вывожу на контекст устройства текст. Как определить в пикселах ширину и высоту выведенных символов текста?

использовать процедуру 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, куда 
     //будут помещены размеры
);