λͼ���豸�����ĺ�BitBlt
������bmp_one
GDI
����MS
Windows��DOS�������������Ƚ�ΰ���һ���¾����㲻��֪�����õ�ʲô��ʾӲ���Ϳ�����ʾͼ�Σ���DOS��ͬ���ǣ�Windows�ṩ��һ��API����ͼ���豸�ӿ�(Graphics
Device InterFace)�����֮ΪGDI��GDI��һ��ͨ�õ�ͼ�ζ���������Ļ���ȴ������Ǵ�ӡ����ͼ��
�豸������
����GDI��һ�����豸�����ģ�Device Context��DC���ĸ�����ϵ�úܽ��ܣ���HDC�������������������Handle to Device
Context���豸�����ĵľ������һ��HDC��ž���һ������������ͼ�ľ���������Դ���������Ļ��һ�����ڵĿ͑�����һ�����ڃȴ��е�λͼ������һ����ӡ�����ȽϺõ�һ���������������Ҫ֪������ָ������������һ�ַ�����ʹ����������д�Զ���Ļ�ͼ����ʱ����Ϳ����������κ������豸��Ϊÿ���豸���ģ�
����HDC���������GDI����һ���е���Ӳ������˵�㲻��ֱ�ӷ����������ݣ�������������Խ��䴫�����Բ������ĺܶ�GDI�����������ͼ����ȡ������Ϣ�����������һЩ�ģ�
�������磬���������һ�������ϻ�ͼ��������Ҫ��GetDC()����ȡ����������ڵ�HDC��Ȼ����Ϳ������κ���HDCΪ������GDI��������BitBlt()����ͼ��TextOut()��������֣�LineTo()�������ȵȣ�
λͼ
����λͼ������ǰ���½ڵ������е�ͼ��һ����װ�룬��һ��LoadBitmap()����ɴ�����Ļ������������װ��һ��λͼ��Դ������LoadImage()��������һ��*.bmp�ļ�װ��λͼ�������ͼ����һ����
����GDI�и�������ĵط����㲻��ֱ�Ӵ���λͼ����HBITMAP���ͣ���ͼ����ס��ͼ�����Ѿ����豸�����ij�������Ҫ��һ��λͼ�����ͼ��������Ҫ����һ���ȴ�DC��Ȼ����SelectObject()��HBITMAPѡ�����У�����Ч���������HDCָ���''�豸''���ǃȴ��е�λͼ������������HDCʱ������ʵ���������Ǹ�λͼ������Ч��.
���ᵽ�ģ���һ���ܷ���ķ�����ֻҪ���дΪ��һ��HDC��ͼд������Ϳ�����������һ������DC��һ���ȴ�DC�϶�����Ҫ�κεļ��Ķ���
�������Լ��Dz��ܲ����ڃȴ��е�λͼ���ݵģ���������豸����λͼ��Device independent
Bitmaps��DIB��������������������������GDI��һ��IJ���һ������DIB�ϣ����������Ϊ�Ѿ���������������Ľ̵̳ķ�Χ������������ֻ���ۼ�GDI����������
GDIй©
����һ������˶�һ��HDC�IJ������ͷ����Ǻ���Ҫ��(������ô����ȡ�Q��������ô���õ����ģ�����������Ͻ�Ҫ̸��).GDI����������.
��windows95֮ǰ�İ汾�����Dz������������ŵ���������������ϵͳ�й������������һ���������˹���Ļ����e�ij���������ܻ��κζ���!���˵������ڵ���r�Ѿ��������ˣ������������Windows2000��XP���úܶ������Դ��ֱ����r��ú���...�����ͷ�GDI�����Ǻ����ױ����ǵģ���Windows
9x����ij�����Ժܿ������GDI��Դ.�����Ͻ���NT(NT/2K/XP)ϵͳ���㲻Ӧ�ÿ��ܰ�ϵͳ��GDI��Դ���꣬���ǻ��Ǵ��ڼ�����r����������Dz������ð�գ�
���������ij����ڸոտ�ʼ�ļ�������������Ȼ��ʼ��ֵػ�ͼ������Ͳ���ͼ�ˣ���ͱ�����ܿ���й©��GDI
��Դ.ֵ����ע��Ҫ�ͷŵ�GDI������ֻ��HDC�����ǰ�λͼ������֮�����Դ�ڳ�����������������б���������ǰ�ȫ�ģ���������ÿ����Ҫ��װ��һ��Ҫ��Ч��Щ��
�������У�һ��HDCһ��ֻ�ܱ���һ�����͵Ķ���λͼ�����壬�ʣ�������������ѡ��һ���µĽ�ȥ��ʱ������ԭ���ķ���.
�����ش�����������Ǻ���Ҫ��.�������ȫ�������������ڃȴ��жѻ�������GDIй©.��һ��HDC����������Ҳ��ijЩĬ��ѡ�����Ķ���һ�������������Ƿ��������ʱ����ý����Ǵ������������������HDC��ͼ���Ҫ�����Ǵ��ȥ.�ⲻ����ֻ�ǰ����Լ��Ķ����HDC�h�������Ǹ������飩Ҳ���Խ�Ĭ�ϵĶ�������ط��ڵ����ͷŻ��������HDC��ʱ����Կ����ĵط������Ƿdz��õģ���
��Ҫ���£��������еĶ���Ĭ�ϵ�ѡ��HDC������Կ���MSDN�ҳ���Щ���������ģ���Ϊ����ǰ��ȷ��HBITMAP�Ƿ��������е�һ������Ϊ�������]�й��������ȷ�����ĵ�����������(��ʹ�����Լ���)��������Ĭ�ϵ�λͼ.�ԴӼ���ǰԭ���Ľ̳̱�д������ȷ������ʵ���и�Ĭ�ϵ�λͼ��Ҫ�ͷ�.�����Ϣ����Shaun
Ivory�ṩ�ģ�һ�����Ĺ���ʦ��Ҳ������#winprog�ϵ�һ�����ѣ�
������ʵ��ԭ����д��һ����Ļ����������һ��bug�����������־�����ΪĬ�ϵ�λͼ����]�б���Q������������������������GDI
��Դ�����裡����һ���������Ĵ���
��ʾλͼ
�������ˣ���ʼ̸���£�����һ��������Ļ�ͼ���������ڶ�WM_PAINT��Ϣ�Ĵ�����.����Ĵ��ڴ���С�����Ǵ�һ���������Ĵ��ڻָ�������ʾ��
Windows����Ĵ��ڷ���WM_PAINT��Ϣ������֪����Ĵ�����Ҫ���»����ă���.��������Ļ�ϻ�ͼʱ���������õػ���ȥ��ֻ���������e��ʲô������������֮ǰ���ڣ��������ʵ���ʱ������Ҫ���»�����
HBITMAP g_hbmBall = NULL;
case WM_CREATE:
g_hbmBall = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BALL));
if(g_hbmBall == NULL)
MessageBox(hwnd, "Could not load IDB_BALL!", "Error", MB_OK | MB_ICONEXCLAMATION);
break;
��������Ҫ���ĵ�Ȼ��װ��λͼ������һ��λͼ��Դ��˵��ܼ���װ��������ʲô��Դ�]��ʲô�ܴ�IJ.Ȼ�����ǿ�ʼ��ͼ������
case WM_PAINT:
{
BITMAP bm;
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbmOld = SelectObject(hdcMem, g_hbmBall);
GetObject(g_hbmBall, sizeof(bm), &bm);
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
SelectObject(hdcMem, hbmOld);
DeleteDC(hdcMem);
EndPaint(hwnd, &ps);
}
break;
��ȡ����DC
�����ڿ�ʼ��ʱ�����Ƕ���һЩ������ע���һ����һ��λͼ��������һ��HBITMAP��BITMAP��һ������ʵ�ʵ�GDI����HBITMAP���й���Ϣ��һ���ṹ�壮������Ҫһ�ֵõ�HBITMAP�ĸ߶ȺͿ��ȵķ�������������ʹ��GetObject()��������������������෴���������������ػ�ȡһ�������ǻ�ȡһ���Ѿ����ڵĶ���������Ϣ.����ǡ�GetObjectInfo��������ֻ���ǡ��Щ.GetObject()���ԶԲ�ͬ�����GDI����ʹ�ã��������ͨ���ڶ������������ṹ��Ĵ�С�����ֵģ�
����PAINTSTRUCT��һ���ṹ�壬������Ҫ��ͼ�Ĵ��ں�Ҫʵ�ʻ�ͼ�ă�����ص���Ϣ.���ڴ��������������Լغ�������������Ϣ��������BeginPaint()ʱҪ�õ���.BeginPaint()�����������ͬ��������һ�����������������WM_PAINT��Ϣ��.�����Ǵ���һ��WM_PAINT��Ϣ��ʱ�������ʹ��GetDC()������������ϻ������ǵĶ�ʱ���������п���...������WM_PAINT��Ϣ�Ĵ����У�BeginPaint()��EndPaint()��ʹ���Ǻ���Ҫ�ģ�
����BeginPaint()�����Ƿ���һ��HDC���������Ǵ�������HWND������WM_PAINT��Ϣ���������Ǹ����.���Ƕ����HDC�������κβ�������������Ļ����ʾ������
Ϊλͼ����һ���ȴ�DC
������ͬ���������ᵽ�ģ�Ϊ����λͼ�ϻ���λͼ����ͼ������Ҫ�ڃȴ��д���һ��DC������������ķ�������CreateCompatibleDC()�������Ѿ��е��Ǹ�������.���������Ǿͻ�õ�һ�������ǵĴ��ڵ�HDC���ɫ��Ⱥ���ʾ��������ݵăȴ�DC��
�����������ǵ���SelectObject()�����λͼѡ�����DC����С�ĵش洢Ĭ�ϵ�λͼ�������Dz����ں�������Q��ʱ������GDI����й©��
��ͼ
����һ�����ǽ����λͼ�Ĵ�С�õ������뵽BITMAP�ṹ����ȥ�����ǾͿ��Ե���BitBlt()�������ͼ��Ӄȴ�DC����������DC��ȥ��������Ļ����ʾ.
�����ϻ����������MSDN�в�����ÿ�����������ؽ��������ǣ�Ŀ�꣬λ�����С��Դ��Դλ�ã��������դ����(Raster
Operation��ROP����)����������ָ���������Ƶ�.�ڱ���������ֻ��ذ�Դ���и��ƣ����㻨����ڣ�
����BitBlt()����������Win32
API����Happy��һ���������κ�����Windows��д���[Ϸ���DŽe��ͼ��Ӧ�õ��˶���ϲ������Ҳ�������ҵ�һ����ס�����еIJ�����API������
���
�������ʱ��λͼӦ���Ѿ�����Ļ���ˣ�����Ҫ�Լ���������.Ҫ���ĵ�һ�������ǰуȴ�DC�ָ������ǻ�ȡ��ʱ���״̬����˼����Ҫ�����Ǵ洢��Ĭ�ϵ�λͼ����Q���ǵ�λͼ.��һ���Ϳ�����DeleteDC()��������һ���h����
�������������EndPaint()���ͷŴ�BeginPaint()�õ��Ĵ���DC��
��������һ��HDC��ʱ�е������Ի���Ϊ�����������ķ�ʽ�����������ַ�����������������
����������һЩ���õĻ�ȡһ��DC����������ʹ�����ͷŵķ�����
��GetDC() -- ReleaseDC()
��BeginPaint() -- EndPaint()
��CreateCompatibleDC() -- DeleteDC()
������������dz�����ֹ��ʱ����������������õ����е���Դ�ͷŵ�.�Ӽ����Ͻ��ⲻ�ǽ^�Ե���Ҫ����Ϊ�ִ���Windowsƽ̨����ij�����ֹ��ʱ���Ѿ����Ժ����ܵذ�������ж����ͷŵ������ǰ����Լ��Ķ����������Ǻ��кô��ģ���Ϊ�����͵����ȥ�h�����ǣ����ǵ�ϰ�߾ͻ��ú���ɢ�����Һ������ɵģ�������һЩ�ϵİ汾��Windows�л��кܶ��bug����������ȫ������GDI����������Լ��������һ��Ļ���
case WM_DESTROY:
DeleteObject(g_hbmBall);
PostQuitMessage(0);
break;
|