📄 tkwingdi.c
字号:
devPtr->hobjs[selTest[i].type]);#ifdef CKGRAPH_DEBUG /* * look if the current object is owned by us */ if(CkGraphFindObject(selTest[i].type,(ClientData)hsel)==NULL) { dprintf(" %-12.12s 0x%8.8x isn't owned by us\n","ERROR", hsel); }#endif } /* select back */ if(selTest[i].type==CKOBJ_PAL) { SelectPalette(devPtr->hdc,hsel,TRUE); } else { SelectObject(devPtr->hdc,hsel); } } }}#ifdef CKGRAPH_DEBUGint CkGraph_DumpActiveObjects (char* fileName){ FILE *fileP; GdiObj *objPtr; int i=0; if(fileName) if((fileP = fopen (fileName, "a"))==(FILE*)0) return 0; /*go to the end*/ for (objPtr = gdiObjlistPtr; objPtr; objPtr = objPtr->next) if(!objPtr->next) break; for (; objPtr ; objPtr=objPtr->prev,i++) { if(!fileName) { dprintf ("%d:%-12.12s %8lx %s %d\n",i, obj_type(objPtr->type),objPtr->handle,objPtr->file,objPtr->line); if(isDC(objPtr->type)) { GdiContext* devhead=FINDCONTEXT((HDC)objPtr->handle); if (devhead!=NULL){ dprintf(" defbitmap=0x%x\n",devhead->defaultbitmap); } } } else { fprintf (fileP, "%-12.12s 0x%x %s %d\n", obj_type(objPtr->type),objPtr->handle,objPtr->file,objPtr->line); } } if(fileName) fclose (fileP); return 1;}//if debugging is off Windows-CreatePen a.s.o is usedHPEN CkGraph_CreatePen(int fnPenStyle,int nWidth,COLORREF crColor,char* file,int line){ HPEN hpen; if((hpen=CreatePen(fnPenStyle,nWidth,crColor))==(HPEN)0){ dprintf("CkCreatePen failed in %s %d\n",file,line); return (HPEN)0; } tkWinGdi_CreatePen++; GTRACE(("%d:CreatePen(..,%d,%0x%x) return 0x%x in %s %d\n",tkWinGdi_CreatePen,nWidth,crColor,hpen,file,line);) CkGraphCreateObject(CKOBJ_PEN,(ClientData)hpen,file,line); return hpen;}HPEN CkGraph_ExtCreatePen(DWORD dwPenStyle,DWORD dwWidth,CONST LOGBRUSH* lplb, DWORD dwStyleCount, CONST DWORD* lpStyle, char* file,int line){ HPEN hpen; if((hpen=ExtCreatePen(dwPenStyle,dwWidth,lplb,dwStyleCount,lpStyle))==(HPEN)0){ dprintf("CkExtCreatePen failed in %s %d\n",file,line); return (HPEN)0; } /* do create a PEN instead a EXTPEN , cause it's used in the same meaning*/ CkGraphCreateObject(CKOBJ_PEN,(ClientData)hpen,file,line); tkWinGdi_ExtCreatePen++; GTRACE(("%d:ExtCreatePen(..,%d,%0x%x) return 0x%x in %s %d\n",tkWinGdi_ExtCreatePen,dwWidth,lplb->lbColor,hpen,file,line);) return hpen;}HBRUSH CkGraph_CreateSolidBrush(COLORREF crColor,char* file,int line){ HBRUSH hbrush; if((hbrush=CreateSolidBrush(crColor))==(HBRUSH)0){ dprintf("CkCreateSolidBrush failed in %s %d\n",file,line); return (HBRUSH)0; } CkGraphCreateObject(CKOBJ_BRUSH,(ClientData)hbrush,file,line); tkWinGdi_CreateSolidBrush++; GTRACE(("%d:CreateSolidBrush(0x%x) return 0x%x in %s %d\n",tkWinGdi_CreateSolidBrush,crColor,hbrush,file,line);) return hbrush;}HBRUSH CkGraph_CreatePatternBrush(HBITMAP hbitmap,char* file,int line){ HBRUSH hbrush; if((hbrush=CreatePatternBrush(hbitmap))==(HBRUSH)0){ dprintf("CkCreatePatternBrush(0x%x) failed in %s %d\n",hbitmap,file,line); return (HBRUSH)0; } CkGraphCreateObject(CKOBJ_BRUSH,(ClientData)hbrush,file,line); tkWinGdi_CreatePatternBrush++; GTRACE(("%d:CreatePatternBrush(0x%x) return 0x%x in %s %d\n",tkWinGdi_CreatePatternBrush,hbitmap,hbrush,file,line);) return hbrush;}HBITMAP CkGraph_CreateDIBitmap(HDC hdc, BITMAPINFOHEADER *lpbmih, DWORD fdwInit, VOID*lpbInit, BITMAPINFO *lpbmi,UINT fuUsage,char* file,int line){ HBITMAP hbitmap; if((hbitmap = CreateDIBitmap(hdc,lpbmih,fdwInit,lpbInit,lpbmi,fuUsage))==(HBITMAP)0){ dprintf("CkCreateDIBitmap failed in %s %d\n",file,line); return (HBITMAP)0; } CkGraphCreateObject(CKOBJ_BITMAP,(ClientData)hbitmap,file,line); tkWinGdi_CreateDIBitmap++; GTRACE(("%d:CreateDIBitmap(0x%x,..) return 0x%x in %s %d\n",tkWinGdi_CreateDIBitmap,hdc,hbitmap,file,line);) return hbitmap;}HBITMAP CkGraph_CreateCompatibleBitmap(HDC hdc,int nWidth,int nHeight,char* file,int line){ HBITMAP hbitmap; if((hbitmap = CreateCompatibleBitmap(hdc,nWidth,nHeight))==(HBITMAP)0){ dprintf("CkCreateCompatibleBitmap failed in %s %d\n",file,line); return (HBITMAP)0; } CkGraphCreateObject(CKOBJ_BITMAP,(ClientData)hbitmap,file,line); tkWinGdi_CreateCompatibleBitmap++; GTRACE(("%d:CreateCompatibleBitmap(0x%x,%d,%d) return 0x%x in %s %d\n",tkWinGdi_CreateCompatibleBitmap,hdc,nWidth,nHeight,hbitmap,file,line);) return hbitmap;}HBITMAP CkGraph_LoadBitmap(HINSTANCE hinst,LPCTSTR lpszBitmap,char* file,int line){ HBITMAP hbitmap; if((hbitmap = LoadBitmap(hinst,lpszBitmap))==(HBITMAP)0){ dprintf("CkLoadBitmap failed in %s %d\n",file,line); return (HBITMAP)0; } CkGraphCreateObject(CKOBJ_BITMAP,(ClientData)hbitmap,file,line); tkWinGdi_LoadBitmap++; GTRACE(("%d:LoadBitmap(..,%s) return 0x%x in %s %d\n",tkWinGdi_LoadBitmap,lpszBitmap,hbitmap,file,line);) return hbitmap;}HBITMAP CkGraph_CreateBitmap(int nWidth,int nHeight,UINT cPlanes,UINT cBitsPerPel, VOID* lpvBits,char* file,int line){ HBITMAP hbitmap; if((hbitmap = CreateBitmap(nWidth,nHeight,cPlanes,cBitsPerPel,lpvBits))==(HBITMAP)0){ dprintf("CkCreateBitmap failed in %s %d\n",file,line); return (HBITMAP)0; } CkGraphCreateObject(CKOBJ_BITMAP,(ClientData)hbitmap,file,line); tkWinGdi_CreateBitmap++; GTRACE(("%d:CreateBitmap(%d,%d,%d,%d,...) return 0x%x in %s %d\n",tkWinGdi_CreateBitmap,nWidth,nHeight,cPlanes,cBitsPerPel,hbitmap,file,line);) return hbitmap;}HRGN CkGraph_CreateRectRgn(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect,char* file,int line){ HRGN hrgn; if((hrgn = CreateRectRgn(nLeftRect,nTopRect,nRightRect,nBottomRect))==(HRGN)0){ dprintf("CkCreateRectRgn failed in %s %d\n",file,line); return (HRGN)0; } CkGraphCreateObject(CKOBJ_REGION,(ClientData)hrgn,file,line); tkWinGdi_CreateRectRgn++; GTRACE(("%d:CreateRectRgn(%d,%d,%d,%d) return 0x%x in %s %d\n",tkWinGdi_CreateRectRgn,nLeftRect,nTopRect,nRightRect,nBottomRect,hrgn,file,line);) return hrgn;}HFONT CkGraph_CreateFontIndirect( LOGFONT* lplogfont,char* file,int line){ HFONT hfont; if((hfont = CreateFontIndirect(lplogfont))==(HFONT)0){ dprintf("CkCreateFontIndirect failed in %s %d\n",file,line); return (HFONT)0; } CkGraphCreateObject(CKOBJ_FONT,(ClientData)hfont,file,line); tkWinGdi_CreateFontIndirect++; GTRACE(("%d:CreateFontIndirect(%s,%d) return 0x%x in %s %d\n",tkWinGdi_CreateFontIndirect,lplogfont->lfFaceName,lplogfont->lfHeight,hfont,file,line);) return hfont;}#endif /*CKGRAPH_DEBUG*/int j;typedef struct PalObj { HPALETTE hpal; struct PalObj *next;} PalObj;/* * in this List all gdi-allocated palettes are stored */static PalObj *allocPals = (PalObj*)0; static PalObj *freePals = (PalObj*)0; /* adds a Palette to a given paletteList */void AddPalObj(PalObj** rootPtrPtr,HPALETTE hpal) { PalObj* newPtr=(PalObj*)ckalloc(sizeof(PalObj)); newPtr->hpal = hpal; newPtr->next = *rootPtrPtr; *rootPtrPtr = newPtr ;}/* deletes a Palette from a given paletteList */void RemovePalObj(PalObj** rootPtrPtr,HPALETTE hpal) { PalObj *currPtr; PalObj *prevPtr; PalObj *nextPtr; for (prevPtr = NULL, currPtr = *rootPtrPtr; currPtr != NULL; prevPtr = currPtr , currPtr = nextPtr ) { nextPtr = currPtr->next; if(currPtr->hpal==hpal) { /* we found our candidate so remove it */ if (currPtr==*rootPtrPtr) { *rootPtrPtr = currPtr->next; } else { prevPtr->next = currPtr->next; } ckfree((char*)currPtr); } }}/* walks through a palette list and tries to free the hpal gdiobject *//* if this was successful , the palette is deleted from the list */static void TryFreePalettes(PalObj** rootPtrPtr) { PalObj *currPtr; PalObj *prevPtr; PalObj *nextPtr; for (prevPtr = NULL, currPtr = *rootPtrPtr; currPtr != NULL; prevPtr = currPtr , currPtr = nextPtr ) { nextPtr = currPtr->next; if(DeleteObject(currPtr->hpal)) {#ifdef CKGRAPH_DEBUG dprintf("successful removed palette 0x%x in TryFreePalettes\n", currPtr->hpal); CkGraphDeleteObject(CKOBJ_PAL,(HGDIOBJ)currPtr->hpal,__FILE__,__LINE__);#endif /* delete object was successful, so remove the thing */ if(currPtr==*rootPtrPtr) { *rootPtrPtr=currPtr->next; } else { prevPtr->next=currPtr->next; } ckfree((char*)currPtr); } else {#ifdef CKGRAPH_DEBUG dprintf("failed removing palette 0x%x in TryFreePalettes\n", currPtr->hpal);#endif } }}#ifdef CKGRAPH_DEBUGHPALETTE CkGraph_CreatePalette( LOGPALETTE* lplogpal,char* file,int line)#elseHPALETTE CkGraph_CreatePalette( LOGPALETTE* lplogpal)#endif{ HPALETTE hpal; if((hpal = CreatePalette(lplogpal))==(HPALETTE)0){#ifdef CKGRAPH_DEBUG dprintf("CkCreatePalette failed in %s %d\n",file,line);#endif return (HPALETTE)0; }#ifdef CKGRAPH_DEBUG CkGraphCreateObject(CKOBJ_PAL,(ClientData)hpal,file,line); tkWinGdi_CreatePalette++; GTRACE(("%d:CreatePalette(%d) return 0x%x in %s %d\n",tkWinGdi_CreatePalette,lplogpal->palNumEntries,hpal,file,line);)#endif AddPalObj(&allocPals,hpal); return hpal;}#ifdef CKGRAPH_DEBUGHGDIOBJ CkGraph_GetStockObject(int stockobj,char* file,int line)#elseHGDIOBJ CkGraph_GetStockObject(int stockobj)#endif /*CKGRAPH_DEBUG*/{ HGDIOBJ hobj=NULL; switch(stockobj){ case NULL_PEN: hobj=stock_NULL_PEN;break; case WHITE_PEN: hobj=stock_WHITE_PEN;break; case BLACK_PEN: hobj=stock_BLACK_PEN;break; case NULL_BRUSH: hobj=stock_NULL_BRUSH;break; case WHITE_BRUSH: hobj=stock_WHITE_BRUSH;break; case BLACK_BRUSH: hobj=stock_BLACK_BRUSH;break; case GRAY_BRUSH: hobj=stock_GRAY_BRUSH;break; case DKGRAY_BRUSH: hobj=stock_DKGRAY_BRUSH;break; case LTGRAY_BRUSH: hobj=stock_LTGRAY_BRUSH;break; case SYSTEM_FONT: hobj=stock_SYSTEM_FONT;break; case OEM_FIXED_FONT: hobj=stock_OEM_FIXED_FONT;break; case SYSTEM_FIXED_FONT: hobj=stock_SYSTEM_FIXED_FONT;break; case ANSI_VAR_FONT: hobj=stock_ANSI_VAR_FONT;break; case ANSI_FIXED_FONT: hobj=stock_ANSI_FIXED_FONT;break; case DEVICE_DEFAULT_FONT: hobj=stock_DEVICE_DEFAULT_FONT;break; case DEFAULT_PALETTE: hobj=stock_DEFAULT_PALETTE;break;#ifdef CKGRAPH_DEBUG default: dprintf("unknown stockobject %d\n",stockobj);#endif }#ifdef CKGRAPH_DEBUG if(hobj==NULL){ dprintf("CkGetStockObject failed in %s %d\n",file,line); }#endif return hobj;}#ifdef CKGRAPH_DEBUGHDC CkGraph_GetDC(HWND hwnd,char* file,int line)#elseHDC CkGraph_GetDC(HWND hwnd)#endif{ HDC hdc; if((hdc=GetDC(hwnd))==(HDC)0){#ifdef CKGRAPH_DEBUG dprintf("CkGetDC failed in %s %d\n",file,line);#endif return (HDC)0; }#ifdef CKGRAPH_DEBUG CkGraphCreateObject(CKOBJ_DC,(ClientData)hdc,file,line); tkWinGdi_GetDC++; GTRACE(("%d:GetDC(0x%x) return 0x%x in %s %d\n",tkWinGdi_GetDC,hwnd,hdc,file,line);)#endif CkGraphCreateDeviceContext(CKOBJ_DC,hdc); return hdc;}#ifdef CKGRAPH_DEBUGHDC CkGraph_CreateDC(LPCTSTR lpszDriver,LPCTSTR lpszDevice,LPCTSTR lpszOutput, CONST DEVMODE* lpInitData,char* file,int line)#elseHDC CkGraph_CreateDC(LPCTSTR lpszDriver,LPCTSTR lpszDevice,LPCTSTR lpszOutput, CONST DEVMODE* lpInitData)#endif{ HDC hdc; if((hdc=CreateDC(lpszDriver,lpszDevice,lpszOutput,lpInitData))==(HDC)0){#ifdef CKGRAPH_DEBUG dprintf("CkCreateDC failed in %s %d\n",file,line);#endif return (HDC)0; }#ifdef CKGRAPH_DEBUG { int type; if(Wtk_test_win32s()) type=CKOBJ_DC; else { if((type=GetObjectType(hdc))!=CKOBJ_DC){ dprintf("ObjectType in CkCreateCompatibleDC is %s\n",obj_type(type)); } } CkGraphCreateObject(type,(ClientData)hdc,file,line); tkWinGdi_CreateDC++; } GTRACE(("%d:CreateDC(%s,..) return 0x%x in %s %d\n",tkWinGdi_CreateDC,lpszDriver,hdc,file,line);)#endif CkGraphCreateDeviceContext(CKOBJ_DC,hdc); return hdc;}#ifdef CKGRAPH_DEBUGint CkGraph_ReleaseDC(HWND hwnd,HDC hdc,char* file,int line)#elseint CkGraph_ReleaseDC(HWND hwnd,HDC hdc)#endif{ int result; result=ReleaseDC(hwnd,hdc);#ifdef CKGRAPH_DEBUG if(!result) dprintf("CkReleaseDC failed in %s %d\n",file,line); CkGraphDeleteObject(CKOBJ_DC,(ClientData)hdc,file,line); tkWinGdi_ReleaseDC++; GTRACE(("%d:ReleaseDC(0x%x,0x%x) return 0x%x in %s %d\n",tkWinGdi_ReleaseDC,hwnd,hdc,result,file,line);)#endif CkGraphDeleteDeviceContext(hdc); return result;}#ifdef CKGRAPH_DEBUGHDC CkGraph_CreateCompatibleDC(HDC hdc,char* file,int line)#elseHDC CkGraph_CreateCompatibleDC(HDC hdc)#endif{ HDC hdcmem; if((hdcmem=CreateCompatibleDC(hdc))==(HDC)0){#ifdef CKGRAPH_DEBUG dprintf("CkCreateCompatibleDC(0x%x) failed in %s %d\n",hdc,file,line);#endif return (HDC)0; }#ifdef CKGRAPH_DEBUG { int type; if(Wtk_test_win32s()) type=CKOBJ_MEMDC; else { if((type=GetObjectType(hdcmem))!=CKOBJ_MEMDC){ dprintf("ObjectType in CkCreateCompatibleDC is %s\n",obj_type(type));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -