p_win.c
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:8k
源码类别:

图形图象

开发平台:

Visual C++

  1. /********************************************************************
  2. p_win.c - ISee图像浏览器—图像处理模块实现代码文件
  3.     版权所有(C) VCHelp-coPathway-ISee workgroup 2000 all member's
  4.     这一程序是自由软件,你可以遵照自由软件基金会出版的GNU 通用许可证
  5. 条款来修改和重新发布这一程序。或者用许可证的第二版,或者(根据你
  6. 的选择)用任何更新的版本。
  7.     发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定
  8. 目地的隐含的担保。更详细的情况请参阅GNU通用许可证。
  9.     你应该已经和程序一起收到一份GNU通用许可证(GPL)的副本。如果还没有,
  10. 写信给:
  11.     The Free Software Foundation, Inc.,  675  Mass Ave,  Cambridge,
  12.     MA02139,  USA
  13. 如果你在使用本软件时有什么问题或建议,用以下地址可以与我们取得联
  14. 系:
  15. http://isee.126.com
  16. http://www.vchelp.net
  17. 或:
  18. iseesoft@china.com
  19. 作者:临风
  20.    e-mail:ringphone@sina.com
  21.    功能实现:一般必要功能全局函数,方便编程。
  22. 文件版本:
  23. Build 00617
  24. Date  2000-6-17
  25. ********************************************************************/
  26. #include "p_win.h"
  27. #include <stdio.h>
  28. void Errmsg(LPSTR format,...)
  29. {
  30.    char buf[MAX_PATH];
  31. va_list ap;
  32.    va_start(ap, format);
  33.    vsprintf(buf, format, ap);
  34.    va_end(ap);
  35. MessageBox(GetFocus(),buf,"错误",MB_OK | MB_ICONHAND);
  36. }
  37. void PaintNull(HWND hWnd)
  38. {
  39. HDC hDC;
  40.    PAINTSTRUCT ps;
  41.    hDC=BeginPaint(hWnd,&ps);
  42.    EndPaint(hWnd,&ps);
  43.    ReleaseDC(hWnd,hDC);
  44. }
  45. int ClientX(int x)
  46. {return (GetSystemMetrics(SM_CXSIZEFRAME)*2+x);}
  47. int ClientY(int y)
  48. {return (GetSystemMetrics(SM_CYSIZEFRAME)*2+GetSystemMetrics(SM_CYMENU)+y);}
  49. int GetFileName(HINSTANCE hInst,HWND hWnd,LPSTR szFileType,LPSTR szFileName,LPSTR szTitle)
  50. {
  51.    OPENFILENAME ofnTemp;
  52.    DWORD Errval; // Error value
  53.    char buf[5];  // Error buffer
  54.    char szTempName[256]="";
  55.    char Errstr[50]="GetOpenFileName returned Error #";
  56.    char s[MAX_PATH];
  57.    GetCurrentDirectory(MAX_PATH,s);
  58.    SetCurrentDirectory(s);
  59. ofnTemp.lStructSize = sizeof( OPENFILENAME );
  60. ofnTemp.hwndOwner = hWnd; // An invalid hWnd causes non-modality
  61. ofnTemp.hInstance = hInst;
  62.    ofnTemp.lpstrFilter = szFileType;  // See previous note concerning string
  63. ofnTemp.lpstrCustomFilter = NULL;
  64. ofnTemp.nMaxCustFilter = 0;
  65. ofnTemp.nFilterIndex = 1;
  66. ofnTemp.lpstrFile = (LPSTR)szTempName;  // Stores the result in this variable
  67. ofnTemp.nMaxFile = sizeof( szTempName );
  68. ofnTemp.lpstrFileTitle = NULL;//szTitle;
  69. ofnTemp.nMaxFileTitle = NULL;//sizeof(szTitle);
  70. ofnTemp.lpstrInitialDir = s;//NULL; //(LPSTR)SourcePathName;
  71. ofnTemp.lpstrTitle = szTitle;  // Title for dialog
  72. ofnTemp.Flags = OFN_EXPLORER;
  73. ofnTemp.nFileOffset = NULL;
  74. ofnTemp.nFileExtension = 0;
  75. ofnTemp.lpstrDefExt = "*";
  76. ofnTemp.lCustData = 0L;
  77. ofnTemp.lpfnHook = NULL;
  78. ofnTemp.lpTemplateName = NULL;
  79.    if(GetOpenFileName( &ofnTemp ) != TRUE)
  80. {
  81.     Errval=CommDlgExtendedError();
  82.    if(Errval!=0) // 0 value means user selected Cancel
  83.     {
  84.        wsprintf(buf,"%ld",Errval);
  85.       strcat(Errstr,buf);
  86.        MessageBox(hWnd,Errstr,"WARNING",MB_OK|MB_ICONSTOP);
  87.          return (int)Errval;
  88.    }
  89.       else
  90.          return FALSE;
  91. }
  92.    wsprintf(szFileName,szTempName);
  93.    return TRUE;
  94. }
  95. HANDLE Open(LPSTR szFilename,DWORD dwCreate)
  96. {
  97. return CreateFile(szFilename,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,
  98. NULL,dwCreate,FILE_ATTRIBUTE_NORMAL,NULL);
  99. }
  100. HANDLE OpenForRead(LPSTR szFilename,DWORD dwCreate)
  101. {
  102. return CreateFile(szFilename,GENERIC_READ,FILE_SHARE_READ,
  103. NULL,dwCreate,FILE_ATTRIBUTE_NORMAL,NULL);
  104. }
  105. BOOL FailOpen(HANDLE hFile)
  106. {
  107. if(hFile==INVALID_HANDLE_VALUE)
  108.     return TRUE;
  109.    else
  110.     return FALSE;
  111. }
  112. int OSType(void)
  113. {
  114. OSVERSIONINFO osVer;
  115.    osVer.dwOSVersionInfoSize = sizeof(osVer);
  116.    if (!GetVersionEx(&osVer))
  117.     return (FALSE);
  118.    switch(osVer.dwPlatformId)
  119. {
  120.     case VER_PLATFORM_WIN32_WINDOWS:
  121.        return WIN9X;
  122.       case VER_PLATFORM_WIN32s:
  123.        return WIN3X;
  124.       case VER_PLATFORM_WIN32_NT:
  125.        return NT;
  126.    }
  127.    return (FALSE);
  128. }
  129. BOOL SaveBmp(HBITMAP hbm,LPSTR szFilename)
  130. {
  131. BITMAPFILEHEADER bmfh;
  132.    BITMAPINFOHEADER bmih;
  133.    BITMAPINFO    bmif;
  134. BITMAP bm;
  135.    HANDLE hFile;
  136.    DWORD dwtemp;
  137.    HGLOBAL hgMem;
  138.    LPSTR hDate;
  139.    HDC hDC;
  140.    if(GetObject(hbm,sizeof(BITMAP),&bm)==0)
  141.    {
  142.     Errmsg("错误:不能获取图象信息");
  143.       return FALSE;
  144.    }
  145.    ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
  146.    bmfh.bfType=0x4d42;
  147.    bmfh.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+bm.bmWidth*bm.bmHeight*3;
  148.    bmfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
  149.    hFile=Open(szFilename,CREATE_ALWAYS);
  150.    if(FailOpen(hFile))
  151.    {
  152.     Errmsg("文件存取错误。");
  153.       return FALSE;
  154.    }
  155.    if(!WriteFile(hFile,&bmfh,sizeof(BITMAPFILEHEADER),&dwtemp,NULL))
  156.    {
  157.     Errmsg("错误:存储文件出错。");
  158.       CloseHandle(hFile);
  159.       return FALSE;
  160.    }
  161.    ZeroMemory(&bmih,sizeof(BITMAPINFOHEADER));
  162.    bmih.biSize=sizeof(BITMAPINFOHEADER);
  163.    bmih.biWidth=bm.bmWidth;
  164.    bmih.biHeight=bm.bmHeight;
  165.    bmih.biPlanes=1;
  166.    bmih.biBitCount=24;
  167.    bmih.biCompression=BI_RGB;
  168.    if(!WriteFile(hFile,&bmih,sizeof(BITMAPINFOHEADER),&dwtemp,NULL))
  169.    {
  170.     Errmsg("错误:存储文件出错。");
  171.       CloseHandle(hFile);
  172.       return FALSE;
  173.    }
  174.    hgMem=GlobalAlloc(GHND,bm.bmWidth*bm.bmHeight*3);
  175.    if(hgMem==NULL)
  176.    {
  177.     Errmsg("内存分配错误.");
  178.       CloseHandle(hFile);
  179.       return FALSE;
  180.    }
  181.    hDate=(LPSTR)GlobalLock(hgMem);
  182.    bmif.bmiHeader=bmih;
  183.    hDC=GetDC(HWND_DESKTOP);
  184.    GetDIBits(hDC,hbm,0,bm.bmHeight,hDate,&bmif,DIB_RGB_COLORS);
  185.    ReleaseDC(HWND_DESKTOP,hDC);
  186.    if(!WriteFile(hFile,hDate,bm.bmWidth*bm.bmHeight*3,&dwtemp,NULL))
  187.    {
  188.     Errmsg("错误:存储文件出错。");
  189.       GlobalUnlock(hgMem);
  190.       GlobalFree(hgMem);
  191.       CloseHandle(hFile);
  192.       return FALSE;
  193.    }
  194.    GlobalUnlock(hgMem);
  195.    GlobalFree(hgMem);
  196.    CloseHandle(hFile);
  197.    return TRUE;
  198. }
  199. BOOL Read(HANDLE hFile,LPVOID lpBuf,DWORD dwNum)
  200. {
  201.    DWORD dwtemp;
  202. if(!ReadFile(hFile,lpBuf,dwNum,&dwtemp,NULL))
  203.     return FALSE;
  204.    if(dwtemp!=dwNum)
  205.    return FALSE;
  206.    return TRUE;
  207. }
  208. BOOL Write(HANDLE hFile,LPVOID lpBuf,DWORD dwNum)
  209. {
  210.    DWORD dwtemp;
  211. if(!WriteFile(hFile,lpBuf,dwNum,&dwtemp,NULL))
  212.     return FALSE;
  213.    if(dwtemp!=dwNum)
  214. return FALSE;
  215.    return TRUE;
  216. }
  217. DWORD GetFilePointer(HANDLE hFile)
  218. {
  219. return SetFilePointer(hFile,0,NULL,FILE_CURRENT);
  220. }
  221. HANDLE NewThread(LPTHREAD_START_ROUTINE lpStartAddress,LPDWORD lpThreadId)
  222. {
  223. return CreateThread(NULL,0,lpStartAddress,0,0,lpThreadId);
  224. }
  225. int WinWidth(HWND hWnd)
  226. {
  227. RECT rt;
  228.    GetWindowRect(hWnd,&rt);
  229.    return (rt.right-rt.left);
  230. }
  231. int WinHeight(HWND hWnd)
  232. {
  233. RECT rt;
  234.    GetWindowRect(hWnd,&rt);
  235.    return (rt.bottom-rt.top);
  236. }
  237. BOOL GetBmpSize(HBITMAP hbm,SIZE *size)
  238. {
  239. BITMAP bm;
  240.    if(GetObject(hbm,sizeof(BITMAP),&bm)==0)
  241.     return FALSE;
  242.    size->cx=bm.bmWidth;
  243.    size->cy=bm.bmHeight;
  244.    return TRUE;
  245. }
  246. LPVOID New(DWORD dwSize)
  247. { HGLOBAL hgMem;    hgMem=GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT,dwSize);    if(hgMem==NULL)    {     Errmsg("内存分配失败,请检查虚拟内存空间");       return NULL;    }    return (LPVOID)hgMem; }
  248. LPVOID Del(LPVOID lpv)
  249. {
  250.    if(lpv!=NULL)
  251.     GlobalFree(lpv);
  252.    return NULL;
  253. }
  254. void ShowHelpInfo(HINSTANCE hInst,LPSTR szText,LPSTR szCaption,WORD nIconID)
  255. { char Author[11];
  256. MSGBOXPARAMS msgbox ;
  257.    char a[200]="aa";
  258.    int i,j=0;
  259.    Author[0]=0xD7;
  260.    Author[2]=0xD5;
  261.    Author[1]=0xF7;
  262.    Author[3]=0xDF;
  263.    Author[6]=0xC1;
  264.    Author[4]=0xA3;
  265.    Author[5]=0xBA;
  266.    Author[7]=0xD9;
  267.    Author[9]=0xE7;
  268.    Author[8]=0xB7;
  269.    Author[10]='';
  270.    for(i=0;i<300;i++)
  271.    {
  272.       if(szText[i]=='')
  273.        break;
  274.     if(szText[i]!='[')
  275.       {
  276.        a[j]=szText[i];
  277.          j++;
  278.       }
  279.       else
  280.       {
  281.        strcat(a,Author);
  282.          j+=10;
  283.          for(;i<300;i++)
  284.           if(szText[i]==']')
  285.              break;
  286.             else if(szText[i]=='')
  287.              break;
  288.       }
  289.    }
  290.    strcat(a,"");
  291.    msgbox.cbSize = sizeof( msgbox) ;
  292.    msgbox.hwndOwner = HWND_DESKTOP ;
  293.    msgbox.hInstance = hInst ;
  294.    msgbox.lpszText = a ;
  295.    msgbox.lpszCaption = szCaption ;
  296.    msgbox.dwStyle = MB_OK | MB_USERICON ;
  297.    msgbox.lpszIcon = MAKEINTRESOURCE(nIconID);
  298.    msgbox.dwContextHelpId = 1 ;
  299.    msgbox.lpfnMsgBoxCallback = NULL ;
  300.    msgbox.dwLanguageId = MAKELANGID( LANG_NEUTRAL, SUBLANG_NEUTRAL) ;
  301.    MessageBoxIndirect( &msgbox);
  302. }