Pu
							
								Большой босс 
								
								 
								  Offline
								
								78
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 «  : 25-01-2004 15:44 »   | 
								
								 | 
							  
							 
							поделитесь как определить до вызова CreateCompatibleBitmap максимальные резмеры создаваемого битмапа . И как добиться чтобы эти самые размеры были как можно больше. Может надо этот самый битмап другой функцией создавать с меньшим количеством цветов, а не с тем как настроен Screen. За любую информацию заранее спасибо - желательно работа с Windows GDI те не МФС. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							GlukSoft
							
								Главный специалист 
								
								 
								  Offline
								Пол:   
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 25-01-2004 20:53 »   | 
								
								 | 
							  
							 
							Pu, объясни пожалуйста поподробнее задачу, а то я чего-то в вопросе не понял :? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Fatal error C1: Brain expected 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							GlukSoft
							
								Главный специалист 
								
								 
								  Offline
								Пол:   
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 25-01-2004 21:02 »   | 
								
								 | 
							  
							 
							Pu, В Windows 95/98/Me размер создаваемого bitmap'а ограничен 16MB. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Fatal error C1: Brain expected 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Pu
							
								Большой босс 
								
								 
								  Offline
								
								78
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 26-01-2004 06:27 »   | 
								
								 | 
							  
							 
							это я знаю. Мне нужна область больше. И система позицианируется только под NT. Как я понимаю CreateCompatibleBitmap создает в памяти битмап совместимый с настройками текущего ДиСи т.е. если у меня выбрано цвет 32бит то бмп размерами 0x1000 на 0x1000 пикселей отжирает больше 100МБ памяти. Вот и вопрос какой функцией и как создать битмап с другими цветовыми настройками напр 256 цветов а потом можно ли его будет выбрать в аппаратный DC c другими настройками. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							GlukSoft
							
								Главный специалист 
								
								 
								  Offline
								Пол:   
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 26-01-2004 08:53 »   | 
								
								 | 
							  
							 
							Pu, тогда пользуйся CreateBitmap, а для копирования на экран BitBlt. Вот только зачем тебе такой bitmap :?:     А CreateCompatibleBitmap для того и существует, чтобы создать совместимый с DC bitmap, что собственно следует из его названия   .  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Fatal error C1: Brain expected 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Pu
							
								Большой босс 
								
								 
								  Offline
								
								78
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 26-01-2004 09:15 »   | 
								
								 | 
							  
							 
							я просто не силен во  всех этих гди.   делаю я следующее - создаю битмап в памяти, на нем отрисовываю рабочую поляну(там сетку, квадраты , линии - ну в общем все что нужно) а в DoPaint копирую  необходимую область в клиенскую область которая скролится. Может я что не допонимаю. Такой битмап создаю для скроллинга поляны которая должна быть достаточно большой. И при этом начинаются всяческие тормоза из-за огромного витмара.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							GlukSoft
							
								Главный специалист 
								
								 
								  Offline
								Пол:   
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 26-01-2004 09:33 »   | 
								
								 | 
							  
							 
							Pu, создавай bitmap размером с область вывода, рисуй в bitmap только то, что в данный момент будет видно, затем копируй bitmap в DC (я так всегда делаю, правда приходится писать больше кода, но за то не тормозит). 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Fatal error C1: Brain expected 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Pu
							
								Большой босс 
								
								 
								  Offline
								
								78
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 26-01-2004 09:43 »   | 
								
								 | 
							  
							 
							я просто взял за пример bmpview из WTL. A там пользуют обыкновенный вмп из файла. и его соответственно и скролят. Щас попробую переделать.  А битмап лучше по WM_SIZE создавать? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							GlukSoft
							
								Главный специалист 
								
								 
								  Offline
								Пол:   
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 26-01-2004 10:10 »   | 
								
								 | 
							  
							 
							Pu, да. Если хочешь могу скинуть класс, который я написал (мелкий, но экономит время в начале проекта). 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Fatal error C1: Brain expected 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Pu
							
								Большой босс 
								
								 
								  Offline
								
								78
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 26-01-2004 10:48 »   | 
								
								 | 
							  
							 
							спасибо но я думаю это будет лишнее, я просто сразу втупую прописал эту отрисовку особо не разбираясь с гди. В проекте у меня это не самое важное на чем необходимо было терять сразу время. Вот наловил глюков. щас уже сижу рефакторю и выгребаю мусор. А проект уже к концу идет.  8) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Pu
							
								Большой босс 
								
								 
								  Offline
								
								78
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 26-01-2004 14:40 »   | 
								
								 | 
							  
							 
							Посмотрите сорцы - может увидите, что у меня здесь не так. Не выходит чтобы сетка скролилась равномерно. Задача просто отрисовать точками сетку на большой поляне - поляна соответственно должна скролиться
  void CProjView::DoPaint(CDCHandle dc) {    POINT ptScrollOffs;    WTL::CBrush br;          COLORREF colorBg = RGB(20,55,70);    CRect cr;    GetClientRect(&cr);    if(!m_dcMem.m_hDC)       m_dcMem.CreateCompatibleDC(dc);        if(!m_bmpMem.m_hBitmap)                       return;    HBITMAP hBmpOld = m_dcMem.SelectBitmap(m_bmpMem);    br.CreateSolidBrush(colorBg);    HBRUSH old_br = m_dcMem.SelectBrush(br);
     m_dcMem.PatBlt(0, 0, m_sizeImage.cx, m_sizeImage.cy, PATCOPY);
     DrawGreed(m_dcMem, 40);   //paint grid    //m_proj.Draw( m_dcMem);   //paint project
     GetScrollOffset(ptScrollOffs);    dc.BitBlt(ptScrollOffs.x, ptScrollOffs.y, m_sizeImage.cx, m_sizeImage.cy, m_dcMem, 0, 0, SRCCOPY);
     m_dcMem.SelectBrush(old_br);    br.DeleteObject();    m_dcMem.SelectBitmap(hBmpOld);    return; } //----------------------------------------------------------------------- BOOL CProjView::DrawGreed(HDC hdc, DWORD dwStep) {    int offsX = GetScrollPos(SB_HORZ) % dwStep;     int offsY = GetScrollPos(SB_VERT) % dwStep;     WTL::CPen p;    p.CreatePen(PS_SOLID, 1, RGB(0xff, 0xff, 0));    HPEN old_p = (HPEN)::SelectObject(hdc, p);    for(int x = offsX; x < m_sizeImage.cx; x=x+dwStep)       for(int y = offsY; y < m_sizeImage.cy; y=y+dwStep)          SetPixel(hdc, x, y, RGB(200,200,200));    ::SelectObject( hdc, old_p);    p.DeleteObject();    return FALSE; } //----------------------------------------------------------------------- LRESULT CProjView::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {  CPaintDC dc(m_hWnd);    m_sizeImage.cx = (LOWORD(lParam)) ? LOWORD(lParam) : 1;    m_sizeImage.cy = (HIWORD(lParam)) ? HIWORD(lParam) : 1;    if(m_bmpMem.m_hBitmap)     {       m_bmpMem.DeleteObject();       m_bmpMem.m_hBitmap = NULL;     }    m_bmpMem.CreateCompatibleBitmap( dc.m_hDC, m_sizeImage.cx, m_sizeImage.cy);    UpdateWnd();    bHandled = FALSE;    return 0; } 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									«  Ответ #11 : 15-04-2006 17:45 »    | 
								
								 | 
							  
							 
							(комент) Посмотрите сорцы - может увидите, что у меня здесь не так. Не выходит чтобы сетка скролилась равномерно... 
  1) раз код глючный, то спросить у Пу, нужна ли ему тема (скорее нет    ) 2) поскольку вопрос о битмапах ( а так же о рисовании сначала в память для устранения мерцания (и иже с ними)) довольно часто был (помнится) то -      FAQ или статья  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	 |