На нашем форуме накопилось немало ответов на многие вопросы по программированию. Для начинающих это может быть хорошей помощью. Поиск - великое дело, но ответ на нужный вопрос, зачастую, находится в дискуссии по совсем другой теме. Для облегчения поиска мы переработали часть тем форума и сделали набор вопрос-ответов (ЧАВО или FAQ). Его можно увидеть по этой ссылке: http://forum.shelek.com/index.php/board,114.0.html.
A: Все в реестре. В HKEY_CLASSES_ROOT\CLSID\ записан GUID.
В HKEY_CLASSES_ROOT\<ProgID компонента>\CLSID есть информация о расположении файла, о версии компонента и т.п. В реестр лазить API функцией RegQueryValueEx() .
1) Проецируемые в память файлы (с доступом чтение/запись).
Книга: Д. Рихтер "Виндовс для проффесионалов" Глава 17.
2) Разделяемые переменные. Та же глава.
Код:
//Здесь создаём свой сегмент данных. Переменные должны
//быть обязательно инициализированы и помешены между
//двумя pragma data_seg. Иначе они не войдут в данный
//сегмент.
#pragma data_seg("Shared") LONG g_lInstanceCount = 0;
#pragma data_seg()
//теперь только осталось указать компилятору свойства
//этого сегмента
#pragma comment(linker, /SECTION Shared,RWS );
Есть другой путь принудительного включения в сегмент, но сегмент уже должен быть упомянут ранее.
A: От координат на экране нужно отнять величины сдвига, заданные в данный момент полосами прокруток.
Более подробно:
При нулевых положениях полос прокруток левый верхний угол окна имеет логические координаты 0,0. Скажем, при щелчке по окну в обработчик OnLButtonDown пришли координаты X,Y. Для определения действительных значений координат берём текущие значения сдвига окна, заданные полосами прокруток (dX,dY), и отнимаем от координат X,Y.
Код:
void CMyScrollView::OnLButtonDown(UINT nFlags, CPoint point)
{
POINT pnt = GetScrollPosition();
//или
//CPoint pnt = GetScrollPosition();
long Xw=point.x-pnt.x;
long Yw=point.y-pnt.y;
//Если теперь нарисовать на окне точку Xw,Yw, то на
//экране точка будет выведена в точности под курсором
CDC* pdc=GetDC();
pdc->SetPixel(Xw,Yw,RGB(0,0,0));
ReleaseDC(pdc);
CScrollView::OnLButtonDown(nFlags, point);
}
A: Если нужно вывести, к примеру, double с 5 знаками после десятичной точки, сначала нужно сформировать строку вида "%.5f", а потом задать ее в качестве спецификации формата.
Код:
char sDouble[128], strFormat[128];
double d1 = 150.0f;
int nCount;//текущее количество знаков после запятой
...
nCount = 5;
sprintf(strFormat, "%%.%df", nCount );
//strFormat теперь содержит строку "%.5f"
//форматируем:
sprintf(sDouble, strFormat, d1);
A: В printf в спецификаторе числа разрядов можно поставить символ "*". Тогда соответствующий по порядку аргумент будет интерпретирован как число знаков.