| | |
Windows manipulation library
Please support our C++ advertiser: Programming Forums - DaniWeb Sister Site
#include <stdio.h> #include <fcntl.h> /*********************************************************** -WINDOWS INITIALIZATION- ***********************************************************/ typedef BOOL (WINAPI* SLWA)(HWND, COLORREF, BYTE, DWORD); SLWA SetLayeredWindowAttributes; /*********************************************************** -WINDOWS MESSSAGES- ***********************************************************/ #define CNM_CHANGE 900000 /*********************************************************** -WINDOWS SYSTEM DIALOG FUNCTIONS- ***********************************************************/ BOOL ChooseColorDlg(HWND hwnd,CHOOSECOLOR* chc,DWORD flags=CC_FULLOPEN,COLORREF cf[16]=NULL){ chc->lStructSize=sizeof(CHOOSECOLOR); chc->hwndOwner=hwnd; if(cf==NULL){ COLORREF cf2[16]; for(int i=0;i<16;i++){ cf2[i]=0x00FFFFFF; } chc->lpCustColors=cf2; } else{ chc->lpCustColors=cf; } chc->Flags=flags; return ChooseColor(chc); } BOOL OpenFileDlg(OPENFILENAME* ofn,HWND hwnd,char* buff,char* defExt=".txt\0",char* filter="Plain Text (.TXT)\0*.txt\0Rich Text Format (.RTF)\0*.rtf\0All Files\0*.*\0\0",int filterIndex=0){ ofn->lStructSize=sizeof(OPENFILENAME); ofn->hwndOwner=hwnd; ofn->hInstance=GetModuleHandle(0); ofn->lpstrFilter=filter; ofn->lpstrDefExt=defExt; ofn->lpstrFile=buff; ofn->nMaxFile=256; ofn->Flags=OFN_EXPLORER; ofn->nFilterIndex=filterIndex; return GetOpenFileName(ofn); } BOOL SaveFileDlg(OPENFILENAME* ofn,HWND hwnd,char* buff,char* defExt=".txt\0",char* filter="Plain Text (.TXT)\0*.txt\0Rich Text Format (.RTF)\0*.rtf\0All Files\0*.*\0\0",int filterIndex=0){ ofn->lStructSize=sizeof(OPENFILENAME); ofn->hwndOwner=hwnd; ofn->hInstance=GetModuleHandle(0); ofn->lpstrFilter=filter; ofn->lpstrDefExt=defExt; ofn->lpstrFile=buff; ofn->nMaxFile=256; ofn->Flags=OFN_EXPLORER; ofn->nFilterIndex=filterIndex; return GetSaveFileName(ofn); } /*********************************************************** -WINDOWS PROGRAM DEBUGGING FUNCTIONS- ***********************************************************/ #ifndef de_error_windowsh void UseConsole(){ int hCrt; FILE *hf; AllocConsole(); hCrt=_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),_O_TEXT); hf = fdopen(hCrt,"w"); *stdout=*hf; setvbuf(stdout,NULL,_IONBF,0); } void DebugError(){ LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,0,NULL); std::cout<<"ERROR: "<<(const CHAR*)lpMsgBuf<<std::endl; LocalFree( lpMsgBuf ); } #endif #define GetWindowTitle(hwnd,cVar) \ char cVar[GetWindowTextLength(hwnd)+1]; \ GetWindowText(hwnd,cVar,GetWindowTextLength(hwnd)+1); #define GetWindowClassName(hwnd,cVar) \ char cVar[257]; \ GetClassName(hwnd,cVar,256); #ifndef de_error_windowsh void itest(int i,HWND hwnd=0){ char integer[10]; itoa(i,integer,10); MessageBox(hwnd,integer,"Integer Testing",MB_OK); } #endif /*********************************************************** -WINDOW CREATION AND MANIPULATION- ***********************************************************/ class WINCLASSEX{ public: WNDCLASSEX wc; WINCLASSEX(HINSTANCE hinst,WNDPROC wproc,LPSTR cls,int cx=0,int wx=0){ this->wc.lpfnWndProc=wproc; this->wc.cbClsExtra=cx; this->wc.cbSize=sizeof(WNDCLASSEX); this->wc.cbWndExtra=wx; this->wc.lpszMenuName=0; this->wc.lpszClassName=cls; this->wc.style=CS_DBLCLKS; this->wc.hInstance=hinst; this->wc.hbrBackground=(HBRUSH)COLOR_BACKGROUND; this->wc.hIcon=LoadIcon(0,IDI_APPLICATION); this->wc.hIconSm=LoadIcon(0,IDI_APPLICATION); this->wc.hCursor=LoadCursor(0,IDC_ARROW); } WNDCLASSEX GetStruct(){ return this->wc; } void Register(){ if(!RegisterClassEx(&this->wc)){ MessageBox(0,"The specified window could not be registered",this->wc.lpszClassName,MB_OK); } } }; void alert(char* msg="",char* title="Alert!"){ MessageBox(0,msg,title,MB_OK); } void GetWndCursorPos(HWND hwnd,POINT* pt){ GetCursorPos(pt); ScreenToClient(hwnd,pt); } void SetClipboard(UINT format,HANDLE obj,HWND hwnd=0){ OpenClipboard(hwnd); EmptyClipboard(); SetClipboardData(format,obj); CloseClipboard(); } HANDLE GetClipboard(HWND hwnd,UINT format){ OpenClipboard(hwnd); HANDLE rv=GetClipboardData(format); CloseClipboard(); return rv; } void SetWindowAlpha(HWND hwnd,DWORD alpha){ HMODULE u32dll=GetModuleHandle("USER32.DLL"); SetLayeredWindowAttributes=(SLWA)GetProcAddress(u32dll, "SetLayeredWindowAttributes"); if(SetLayeredWindowAttributes){ SetLayeredWindowAttributes(hwnd,0,alpha,0x02); } FreeLibrary(u32dll); } #define StructToUserdata(HW,PTR) SetWindowLong(HW,GWL_USERDATA,(LONG)PTR); #define UserdataToStruct(HW,TYPE,VARNAME) TYPE* VARNAME=new TYPE;\ VARNAME=(TYPE*)GetWindowLong(HW,GWL_USERDATA); #define GetWndClientRect(hwnd,rect) RECT rect;GetWindowRect(hwnd,&rect); #define AddMenuItem(menu,txt,id){\ AppendMenu(menu,MF_STRING,id,txt);\ } #define TrackMenu(hwnd,menu){\ POINT pt;\ GetWndCursorPos(hwnd,&pt);\ TrackPopupMenu(menu,TPM_LEFTALIGN,pt.x,pt.y,0,hwnd,NULL);\ } /*********************************************************** -WINDOWS GDI- ***********************************************************/ COLORREF rgb(COLORREF cr){ return ((DWORD) (((BYTE) (GetBValue(cr)) | ((WORD) (GetGValue(cr)) << 8)) | (((DWORD) (BYTE) (GetRValue(cr))) << 16))); } COLORREF rgb(short r,short g,short b){ return rgb(RGB(r,g,b)); } HBITMAP RectToPlainBitmap(const RECT* r,COLORREF color=RGB(255,255,255)){ int w=r->right-r->left; int h=r->bottom-r->top; COLORREF* map=(COLORREF*)calloc(sizeof(COLORREF),w*h); for(int i=0;i<(w*h);i++){ map[i]=color; } return CreateBitmap(w,h,1,32,map); } HBITMAP RectToBitmap(HDC hdc,const RECT* r){ int w=r->right-r->left; int h=r->bottom-r->top; COLORREF* map=(COLORREF*)calloc(sizeof(COLORREF),w*h); int c=0; for(int y=r->top;y<r->bottom;y++){ for(int x=r->left;x<r->right;x++){ map[c]=GetPixel(hdc,x,y); c++; } } return CreateBitmap(w,h,1,32,map); } HBITMAP WindowToBitmap(HWND hwnd){ HDC hdcWnd,hdcBitmap; int w=100,h=100; HBITMAP hbmBitmap; HBITMAP hbmOld; hdcWnd=GetDC(hwnd); if(hdcWnd){ RECT wnd; GetClientRect(hwnd,&wnd); w=wnd.right; h=wnd.bottom; hbmBitmap=(HBITMAP)CreateCompatibleBitmap(hdcWnd,w,h); if(!hbmBitmap){ if(hdcWnd){ RECT wnd; GetWindowRect(hwnd,&wnd); w=wnd.right; h=wnd.bottom; hbmBitmap=CreateCompatibleBitmap(hdcWnd,w,h); } } if(!hbmBitmap){ std::cout<<"Bitmap missing! "<<std::endl; } hdcBitmap=CreateCompatibleDC(hdcWnd); hbmOld=(HBITMAP)SelectObject((HDC)hdcBitmap,(HGDIOBJ)(HBITMAP)hbmBitmap); BitBlt(hdcBitmap,0,0,w,h,hdcWnd,0,0,SRCCOPY); ReleaseDC(hwnd,hdcWnd); DeleteDC(hdcBitmap); } ReleaseDC(hwnd,hdcWnd); return hbmBitmap; } //Color=Transparent color [For windows that don't want to be rectangles] HRGN BitmapToRegion(HBITMAP hbm,COLORREF color=RGB(255,255,255)){ HDC hdc=CreateCompatibleDC(NULL); BITMAP bm; SelectObject(hdc,hbm); GetObject(hbm,sizeof(bm),&bm); BeginPath(hdc); MoveToEx(hdc,0,0,NULL); for(int y=0;y<bm.bmHeight;y++){ for(int x=0;x<bm.bmWidth;x++){ COLORREF clr=GetPixel(hdc,x,y); if(clr!=color && x>0){ LineTo(hdc,x,y); } else{ MoveToEx(hdc,x+1,y,NULL); } } } EndPath(hdc); WidenPath(hdc); HRGN rgn=PathToRegion(hdc); DeleteDC(hdc); return rgn; } HBITMAP __fastcall AreaToBitmap(int x,int y,int w,int h){ HDC hdc=GetWindowDC(HWND_DESKTOP); HBITMAP hbm; COLORREF map[w*h]; x+=1; y-=1; w-=1; h-=1; int tempx=x; int tempy=y; for(int i=0;i<w*h+1;i++){ if(x==w){ y++; x=tempx; } if(y==h){ return CreateBitmap(w-x,h-tempy,1,32,map); } map[i]=rgb(GetPixel(hdc,x,y)); x++; } return CreateBitmap(w,h,1,32,map); } void DrawRect(HDC hdc,const RECT* rect){ MoveToEx(hdc,rect->left,rect->top,NULL); LineTo(hdc,rect->right,rect->top); MoveToEx(hdc,rect->right,rect->top,NULL); LineTo(hdc,rect->right,rect->bottom); MoveToEx(hdc,rect->right,rect->bottom,NULL); LineTo(hdc,rect->left,rect->bottom); MoveToEx(hdc,rect->left,rect->bottom,NULL); LineTo(hdc,rect->left,rect->top); } void DrawEllipse(HDC hdc,const RECT* rect){ Arc(hdc,rect->left,rect->top,rect->right,rect->bottom,0,0,0,0); } void RefreshWindow(HWND hwnd,UINT flags=RDW_ERASE|RDW_INVALIDATE,HRGN hrgn=0){ RECT client; GetClientRect(hwnd,&client); UpdateWindow(hwnd); RedrawWindow(hwnd,&client,hrgn,flags); } int GetLBSelText(HWND hwnd,char* buff=NULL){ int index=SendMessage(hwnd,LB_GETCURSEL,0,0); int len=SendMessage(hwnd,LB_GETTEXTLEN,index,0); if(buff!=NULL){ SendMessage(hwnd,LB_GETTEXT,index,LPARAM(buff)); } return len; } int AddLBString(HWND hwnd,char* str){ SendMessage(hwnd,LB_ADDSTRING,0,LPARAM(str)); } /*********************************************************** -WINDOW ENUMERATION- ***********************************************************/ namespace WINENUMDATA{ HWND hwnd; int currentIndex; }; BOOL WINENUM__EnumChildWindowsProc(HWND hwndIndex,LPARAM lParam){ if(hwndIndex){ if(lParam==WINENUMDATA::currentIndex){ WINENUMDATA::hwnd=hwndIndex; return FALSE; } WINENUMDATA::currentIndex++; return TRUE; } else{ WINENUMDATA::hwnd=(HWND)NULL; return FALSE; } } BOOL WINENUM__CountChildWindowsProc(HWND hwndIndex,LPARAM lParam){ if(hwndIndex){ WINENUMDATA::currentIndex++; return TRUE; } else{ return FALSE; } } class WINENUM{ private: void ClearData(){ WINENUMDATA::currentIndex=0; WINENUMDATA::hwnd=(HWND)NULL; } public: WINENUM(){}; HWND ChildWindow(HWND hwndOwner,int index){ this->ClearData(); EnumChildWindows(hwndOwner,(WNDENUMPROC)WINENUM__EnumChildWindowsProc,index); return WINENUMDATA::hwnd; } int CountChildWindows(HWND hwndOwner){ this->ClearData(); EnumChildWindows(hwndOwner,(WNDENUMPROC)WINENUM__CountChildWindowsProc,0); return WINENUMDATA::currentIndex; } };
Similar Threads
- windows control library (C#)
- Linking to LAPACK library with g++ on Windows? (C++)
- I need help in Class Library Codes String Manipulation? (C#)
- Microsoft Visual C++ Runtime Library C:\WINDOWS\explorer.exe (Windows NT / 2000 / XP)
- Windows Media Player- no Library? (Windows NT / 2000 / XP)
| Thread Tools | Search this Thread |
Tag cloud for C++
6 api application array arrays assignment beginner binary bitmap c++ c/c++ calculator char class classes code coding compile compiler console conversion convert count data database delete developer display dll email encryption error file forms fstream function functions game generator getline givemetehcodez graph homeworkhelper iamthwee ifstream image input int java lazy lib loop looping loops map math matrix memory multidimensional multiple newbie news node number output parameter pointer problem program programming project proxy python random read recursion recursive reference return sort sorting string strings struct template templates text tree url variable vector video visual visualstudio win32 windows winsock word wordfrequency wxwidgets



