|  | 
	
	
		
	
	
    
        |  11.12.2009, 07:40 | #1 |  
    | 
  
    |  |  
    |  |  |  
    |     Разведчик |    
            
                 Регистрация: 23.11.2009
                 Сообщений: 10
                 Популярность: 146  
	 Сказал(а) спасибо: 6
		
			
				Поблагодарили 41 раз(а) в 20 сообщениях
			
		
	   | 
                 GDI+ Native Template 
 
            
               
    Честно-говоря я просто набиваю сообщения что б увидеть чат   
Но пытаюсь это сделать наиболее культурным способом. В архиве то что в названии темы и еще несколько заморочек, родительский класс контролов и класс edit - его child собственно. 
 
	PHP код: 
		
			
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")//Усовершенствованная версия метода включения WinXP контролов.
 
 
 #pragma comment(lib,"gdiplus.lib")
 #pragma comment(lib,"Ws2_32.lib")
 #include <winsock2.h>
 #include <ws2tcpip.h>
 #include <stdio.h>
 
 
 #include <windows.h>
 #include <ddraw.h>
 #include <stdio.h>
 #include <gdipluspixelformats.h>
 #include <gdiplusenums.h>
 #include <GdiplusTypes.h>
 #include <GdiplusGpStubs.h>
 #include <gdiplusimaging.h>
 #include <gdiplusmetaheader.h>
 #include <gdipluscolor.h>
 #include <gdipluscolormatrix.h>
 #include <GdiPlusFlat.h>
 #include <GdiPlusInit.h>
 
 Эта последовательность инлкудов обязательна - менять нельзя. Собственно это все что нужно для работы с GDI+.
 
Начнемс:  
Пишем в WinMain инициализацию самого GDI+-а
 
	PHP код: 
		
			
GdiplusStartupInput gdiplusStartupInput;ULONG_PTR           gdiplusToken;
 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
 
 Далее едем к wndProc-у 
 
	PHP код: 
		
			
case WM_PAINT:{
 BeginPaint(hWnd,&ps);
 OnPaint();
 EndPaint(hWnd,&ps);
 }return 0;
 
 Собственно это все - дальше в OnPaint-е можете делать все что захотите, но в данном случае реализована двойна-буфферизация: 
 
	PHP код: 
		
			
case WM_CREATE:{
 InitializeGraphics(GetWindowDC(hWnd));
 InvalidateRect(hWnd,0,true);
 }return 0;
 
 
	PHP код: 
		
			
void InitializeGraphics(HDC hdc){
 GdipCreateFromHDC(hdc,&graphics);
 GdipCreateBitmapFromGraphics(Window_w,Window_h,graphics,&bmpBack);
 GdipGetImageGraphicsContext(bmpBack,&memGraphics);
 GdipSetSmoothingMode(memGraphics,SmoothingModeAntiAlias);
 GdipCreatePen1(Color::Black,1.0f,UnitPixel,&pen0);
 }
 
 
	PHP код: 
		
			
void OnPaint(){
 GdipGraphicsClear(memGraphics,0xFFA0A0A0);
 GdipDrawRectangle(memGraphics,pen0,4.0f,4.0f,595.0f,101.0f);
 GdipDrawImagePointRectI(graphics,bmpBack,8,30,0,0,Window_w,Window_h,UnitPixel);
 };
 
 Остальные части программы - заготовки для чего либо. Я не очень силен в С++ потому программа и не была допилена - на ассемблере все это реализуется в пару раз легче.
     
         |  
    |  |   |  
	
		
	
	
	
	
Заявление об ответственности / Список мошенников
	| 
	|  Ваши права в разделе |  
	| 
		
		Вы не можете создавать новые темы Вы не можете отвечать в темах Вы не можете прикреплять вложения Вы не можете редактировать свои сообщения 
 HTML код Выкл. 
 |  |  |  Часовой пояс GMT +4, время: 20:40. |  |