Visual C++ FAQ


Часто задаваемые вопросы по Visual C++.

Как сделать так, чтобы при редактировании были видны комментарии для _своих_ методов или переменных?


1. Надо отметить, если не отмечено, все опции флажками в Tools/Options/Statement completion options;
2. Оставлять комментарии _перед_ объявлением, как например:
//Minimize to tray 
//Надо ли минимизировать в System Tray
BOOL bTrayMin;

Как сделать так, чтобы показывалось только имя приложения?


BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
cs.style &= ~(FWS_PREFIXTITLE|FWS_ADDTOTITLE);
return TRUE;
}

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


 
=== Hачало CTEST.CPP ===
#include

void main()
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
SMALL_RECT srct;
CHAR_INFO chiBuffer[160];
COORD coord1, coord2;
char ddd[666];
CharToOem("2:5095/38 - злобный ламеpюга", ddd);
DWORD cWritten;
coord1.Y = 0; coord1.X = 0;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsoleOutputCharacter(hStdout, ddd, lstrlen(ddd), coord1, &cWritten);
for (int i = 0; i < lstrlen(ddd); i++)
{
WORD wColors = 1 + i * 3;
coord1.X = i;
WriteConsoleOutputAttribute(hStdout, &wColors, 1, coord1, &cWritten);
}
srct.Top = 0; srct.Left = 0; srct.Bottom = 1; srct.Right = 79;
coord1.Y = 0; coord1.X = 0;
coord2.Y = 1; coord2.X = 80;
ReadConsoleOutput(hStdout, chiBuffer, coord2, coord1, &srct);
for (i = 0; i < 50; i++)
{
srct.Left = (SHORT)((double)(79 - lstrlen(ddd)) * rand() / RAND_MAX);
srct.Top = (SHORT)((double)25 * rand() / RAND_MAX);
srct.Bottom = srct.Top + 1;
WriteConsoleOutput(hStdout, chiBuffer, coord2, coord1, &srct);
}
Sleep(10000);
}
=== Конец CTEST.CPP ===
Как подгрузить Riched32.dll в InitInstance()?
 
BOOL CTestApp::InitInstance()
{
HMODULE hmod = LoadLibrary("Riched32.dll"); //Загружаем
if(hmod == NULL){
AfxMessageBox("RichEdit пахать не будет");
return false;
}

CTestDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal(); // в TestDlg нарисован RichEdit

FreeLibrary(hmod); //Выгружаем

return false;
}
Как программно определить тип файловой системы?
Используйте Win32 API - функцию GetVolumeInformation(...)

Как на VC5.0 создать окошко на full-screen?
 
BOOL CMyWnd::Create()
{
...
CRect rect(0, 0, GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
strClass - заpегистpиpованный оконный класс.
CreateEx(WS_EX_APPWINDOW, strClass, AfxGetAppName(), WS_SYSMENU | WS_POPUP |
WS_VISIBLE, 0, 0, rect.right, rect.bottom, NULL, NULL, 0);
...
}
или
 hwnd=CreateWindowEx(0, "Name", "Title",
WS_POPUP|WS_SYSMENU, 0, 0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),
0, 0, hInstance, 0);
Как занести строку из CEdit'a в CListBox?
 
m_Edit.SetWindowText("aaa\r\nbbb\r\nccc");
// в Edit теперь три строки. Ловим первую
char buffer[100]; // Выделяем буфер
int count = m_Edit.GetLine(0, // индекс строки
buffer, // указатель на буфер
sizeof(buffer)); // размер буфера
// Если OK, то возвращает кол-во скопированных символов
buffer[count] = 0; // Скопированная строка не заканчивается \0
m_ListBox.AddString(buffer); // В данном случае "aaa"
или с помощью MFC:
 
CTreeCtrl *list = (CTreeCtrl*)GetDlgItem(IDC_TREE);
list->InsertItem( string, NULL, TVI_LAST );
Почему функция CreateProcess не запускает *.lnk-файлы?
Потому что она создает процессы только для _запускаемых_ файлов. *.lnk-файлы не являются запускаемыми.Чтобы это сделать используйте ShellExecute.

Как поменять указатель мыши со стрелки на часики и обратно?
Используйте функции BeginWaitCursor() и EndWaitCursor(). Есть еще один (из многих) путь:
 
void CTest::MyBiiiiigFunc()
{
CWaitCursor wait;
for(int j=0; j<0x7ffffff; j++){
//......
Sleep(1000);
// И тут все время крутятся часики
}
} // А вот тут их уже нет.

При создании объекта курсор заменяется на часики дефолтным конструктором. Деструктором - восстанавливается прежний.

 
« Предыдущая статья