Доброе время суток, Yuri Gordienko! Отправляю. Ответ отправлен: 14.07.2003, 16:34 Отправитель: baldr
Вопрос № 932
Доброго времени суток вопрос1: когда создаю несколько дочерних окон возникает такая проблема: если одно дочернее окно расположить поверх другого дочернего, а потом перетащить то окно, которое закрывается верхним, то оно перетаскивается вместе с "прилипшим" куском перекрывающего его окна. если же перемещать верхнее, то окно, что под ним, перерисовывается нормально. как сделать, чтобы и нижнее окошко нормально отображалось? делаю так: WNDCLASS wc; GetClassInfo(hInst,ClassName,&wc); wc.lpszClassName="ClassChildName"; wc.hInstance=hInst; wc.lpfnWndProc=(WNDPROC)WndProc_overlapped; RegisterClass(&wc); HWND hWnd_2 = CreateWindow ( "ClassChildName","CHILDWINDOW", WS_CHILDWINDOW|WS_CAPTION|WS_MINIMIZEBOX|WS_MAXIMIZEBOX, 150,150,250,250, hWnd,NULL,hInst,NULL ); ShowWindow(hWnd_2,
SW_SHOWNORMAL); UpdateWindow(hWnd_2); попробовал добавить в WndProc_overlapped такое(результат тот же): case WM_PAINT: { HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hWnd,&ps); //< Получить контекст окна EndPaint(hWnd,&ps); //< Освободить контекст окна }; break; case WM_ACTIVATE : { SendMessage(hWnd, WM_PAINT, NULL, NULL); }; break; case WM_MOVE : { SendMessage(hWnd, WM_PAINT, NULL, NULL); }; break;
Приветствую Вас, вова! Нужно использовать стили WM_CLIPSIBLINGS и WM_CHILD- вроде они- если разберёшся- всё будет работать. Ответ отправлен: 15.07.2003, 12:52 Отправитель: Morgion
Вопрос № 939
Здравствуйте, Обьясните пожалуйста, почему память защищена в этом случае. Ведь это-же не константа. Спасибо.
Приветствую Вас, XShocK! Если у Вас в настройках проекта (VC++ 6.0) Debug Info установлена в Program Database For Edit And Continue (а это значение по умолчанию), то для компилятора автоматически устанавливается опция /GF и он объединяет повторяющиеся строки и кладет их в память _только для чтения_. Из-за попытки запись в эту память и выдается ошибка. С уважением, Avl2k. #include "stdafx.h" #include <iostream> #include <tchar.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char* test= "Hello!"; char* test2 = "Hello!"; cout << "Same address: " << boolalpha << (test == test2) << endl; return 0; } Ответ отправлен: 16.07.2003, 12:28 Отправитель: Avl2k Отвечает Yuri Gordienko
Здравствуйте, XShocK! В принципе, у тебя здесь потенциальная ошибка, которая на разных компиляторах может вести себя по разному. char *test - это указатель на стоку "Hello!", которая на этапе компиляции может быть обработана так, как посчитает нужным компилятор, т.е. может быть упакована и т.п. - для компилятора это константа. Опасно изменять константные переменные. Для тебя лучше сделать так: char test[] = "Hello!"; или char test[10]; Успехов
Ответ отправлен: 17.07.2003, 15:22 Отправитель: Yuri Gordienko
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.