当前位置: 首页 > news >正文

怎样制作一个自己的网站住房和城乡建设部政务服务门户官网

怎样制作一个自己的网站,住房和城乡建设部政务服务门户官网,苏州企业网站制作开发,宁夏住房和城乡建设厅网站首页VC编程中20种各种编程技巧和方法 1. 如何激活当前屏幕保护程序 2. 如何禁止/启用屏幕保护及电源管理 3. 如何激活和关闭IE浏览器 4. 如何给树控件加入工具提示 5. 如何获取系统信息框的路径 6. 如何直接运行一个资源中的程序 7. 如何遍历整个目录 8. 如…VC编程中20种各种编程技巧和方法 1.    如何激活当前屏幕保护程序 2.    如何禁止/启用屏幕保护及电源管理 3.    如何激活和关闭IE浏览器 4.    如何给树控件加入工具提示 5.    如何获取系统信息框的路径 6.    如何直接运行一个资源中的程序 7.    如何遍历整个目录 8.    如何禁止/启用系统热键 9.    如何隐藏/显示WINDOWS系统任务栏 10.    如何实现窗口到系统区图标间的动画效果 11.    如何判断当前操作系统的版本 12.    如何在指定矩形框内水平/垂直显示多行文字 13.    如何在指定矩形中旋转显示文字 14.    如何将32 x 32像素图标转换为16 x 16像素值的图标 15.    如何建立一个灰度级图标 16.    如何按指定角度旋转显示内存位图(用法和BitBlt类似) 17.    如何将指定的窗体以位图形式复制到系统剪切板上 18.    如何替换HBITMAP中的颜色值 19.    如何转换并保存位图 20.    如何获取局域网上计算机名及它们的IP地址 1.    如何激活当前屏幕保护程序 // 激活当前屏幕保护程序, jingzhou xu     PostMessage(WM_SYSCOMMAND,SC_SCREENSAVE,0); 2.    如何禁止/启用屏幕保护及电源管理 static UINT dss_GetList[] {SPI_GETLOWPOWERTIMEOUT, SPI_GETPOWEROFFTIMEOUT, S PI_GETSCREENSAVETIMEOUT}; static UINT dss_SetList[] {SPI_SETLOWPOWERTIMEOUT, SPI_SETPOWEROFFTIMEOUT, S PI_SETSCREENSAVETIMEOUT}; static const int dss_ListCount _countof(dss_GetList); l    禁止屏幕保护及电源管理 { m_pValue new int[dss_ListCount]; for (int x0;xdss_ListCount;x) { // 禁止屏幕保护及电源管理 VERIFY(SystemParametersInfo (dss_SetList[x], 0, NULL, 0)); } delete[] m_pValue; } l    启用屏幕保护及电源管理 { m_pValue new int[dss_ListCount]; for (int x0;xdss_ListCount;x) { //启用屏幕保护及电源管理 VERIFY(SystemParametersInfo (dss_SetList[x], m_pValue[x], NULL, 0)); } delete[] m_pValue; } 3.    如何激活和关闭IE浏览器 //激活并打开IE void lounchIE() {   HWND hFindWindowEx(NULL,NULL,NULL,                       Microsoft Internet Explorer) ;   ShellExecute(h,open,C:\simple.html,                NULL,NULL,SW_SHOWNORMAL); } //关闭IE及其它应用 void CloseIE() {   int appBSM_APPLICATIONS;   unsigned long  bsm_app(unsigned long )app;   BroadcastSystemMessage(BSF_POSTMESSAGE,bsm_app,                          WM_CLOSE,NULL,NULL); } 4.    如何给树控件加入工具提示 l    首先给树控件加入TVS_INFOTIP属性风格如下所示 if (!m_ctrlTree.Create(WS_CHILD|WS_VISIBLE|     TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS|TVS_INFOTIP,  //加入提示TVS_INFOTIPjingzhou xu(树控件ID:100)         CRect(0, 0, 0, 0), m_wndTreeBar, 100))     {         TRACE0(Failed to create instant bar child\n);         return -1;     } l    其次加入映射消息声明如下所示: afx_msg void OnGetInfoTip(NMHDR* pNMHDR,LRESULT* pResult);       //树控件上加入 提示消息jingzhou xu    ON_NOTIFY(TVN_GETINFOTIP, 100, OnGetInfoTip)                  //树控件条目上加 入提示jingzhou xu l    最后加入呼应涵数处理 void CCreateTreeDlg::OnGetInfoTip(NMHDR* pNMHDR,                                      LRESULT* pResult)    {   *pResult 0;   NMTVGETINFOTIP* pTVTipInfo (NMTVGETINFOTIP*)pNMHDR;   LPARAM itemData (DWORD) pTVTipInfo-lParam;   //对应每个条目的数据   HTREEITEM hItem pTVTipInfo-hItem;   CString tip;   HTREEITEM hRootItem m_chassisTree.GetRootItem();   if (hRootItem ! pTVTipInfo-hItem)   {     tip 树结点的提示;   }   else   {     tip 树根上的提示;   }   strcpy(pTVTipInfo-pszText, (LPCTSTR) tip); } 5.    如何获取系统信息框的路径 #include atlbase.h #define IDS_REG_KEY_MSINFO_PATH1 _T( Software\Microsoft\Shared Tools\MSInfo  ) #define IDS_REG_KEY_MSINFO_PATH2 _T( Software\Microsoft\Shared Tools Location ) #define IDS_REG_VAL_MSINFO_PATH1 _T( Path ) #define IDS_REG_VAL_MSINFO_PATH2 _T( MSInfo ) #define IDS_MSINFO_EXE_NAME      _T( MSInfo32.exe ) //... BOOL GetSysInfoPath( CString strPath ) {             strPath.Empty();     LPTSTR  pszPath strPath.GetBuffer( MAX_PATH );              CRegKey reg;     DWORD   dwSize  MAX_PATH;     LONG    nRet    reg.Open( HKEY_LOCAL_MACHINE, IDS_REG_KEY_MSINFO_PATH1,  KEY_READ );                      // 在注册表中寻找第一个MSInfo32.exe 位置     if ( nRet ERROR_SUCCESS )     {         #if ( _MFC_VER 0x0700 )             nRet reg.QueryStringValue( IDS_REG_VAL_MSINFO_PATH1, pszPath, d wSize );         #else             nRet reg.QueryValue( pszPath, IDS_REG_VAL_MSINFO_PATH1, dwSize  );         #endif reg.Close();     }          // 如果第一次寻找失败则进行第二次寻找     if ( nRet ! ERROR_SUCCESS )     {         nRet reg.Open( HKEY_LOCAL_MACHINE, IDS_REG_KEY_MSINFO_PATH2, KEY_REA D ); if ( nRet ERROR_SUCCESS )         {             #if ( _MFC_VER 0x0700 )                 reg.QueryStringValue( IDS_REG_VAL_MSINFO_PATH2, pszPath, dwSi ze );             #else                 reg.QueryValue( pszPath, IDS_REG_VAL_MSINFO_PATH2, dwSize ); #endif                          // 路径名不包括EXE文件名             if ( nRet ERROR_SUCCESS )                 VERIFY( ::PathAppend( pszPath, IDS_MSINFO_EXE_NAME ) ); reg.Close();         }     }              strPath.ReleaseBuffer();     strPath.FreeExtra();          // 检查文件是否有效.         return ::PathFileExists( strPath ); } 6.    如何直接运行一个资源中的程序 bool Run()    {     CFile f;      char* pFileName Execution.exe;     if( !f.Open( pFileName, CFile::modeCreate | CFile::modeWrite, NULL ) )     {         AfxMessageBox(Can not create file!);         return 0;     }         CString path f.GetFilePath();     HGLOBAL hRes;     HRSRC hResInfo;      //获取应用实例       HINSTANCE insApp AfxGetInstanceHandle();      //寻找EXE资源名     hResInfo FindResource(insApp,(LPCSTR)IDR_EXE4,EXE);     hRes LoadResource(insApp,hResInfo );   // Load it     DWORD dFileLength SizeofResource( insApp, hResInfo );  //计算EXE文件大小       f.WriteHuge((LPSTR)hRes,dFileLength);  //写入临时文件      f.Close();     HINSTANCE HINSsd ShellExecute(NULL, open,path, NULL, NULL, SW_SHOWNORM AL); //运行它.       return 1; } 7.    如何遍历整个目录 #include windows.h #include shlobj.h //浏览目录. void    BrowseFolder( void ) {     TCHAR path[MAX_PATH];     BROWSEINFO bi { 0 };     bi.lpszTitle (递归调用所有目录);     LPITEMIDLIST pidl SHBrowseForFolder ( bi );          if ( pidl ! 0 )     {         // 获取目录路径         SHGetPathFromIDList ( pidl, path ); //设置为当前路径         SetCurrentDirectory ( path );              //搜索所有子目录         SearchFolder( path ); // 释放内存         IMalloc * imalloc 0;         if ( SUCCEEDED( SHGetMalloc ( imalloc )) )         {             imalloc-Free ( pidl );             imalloc-Release ( );         } } //搜索其下所有子目录及文件. void    SearchFolder( TCHAR * path ) {         WIN32_FIND_DATA FindFileData;         HANDLE            hFind; TCHAR    filename[ MAX_PATH 256 ];         TCHAR    pathbak[ MAX_PATH ]; //复制初始用户选择目录         strcpy( pathbak, path ); //寻找第一个文件         hFind FindFirstFile ( *.*, FindFileData ); //搜索所有文件及子目录         do         {             if ( hFind ! INVALID_HANDLE_VALUE )             {                 //如果是当前目录或父目录跳过                 if ( ! ( strcmp( FindFileData.cFileName, . ) ) || ! ( strcmp ( FindFileData.cFileName, .. ) ) )                 {                     continue;                 } //恢复初始用户选择目录                 strcpy( path, pathbak ); //列出所有发现的文件                 sprintf( path, %s\%s, path, FindFileData.cFileName ); //如果 SetCurrentDirectory 成功的话则它是一个目录递归调用继 续搜索子目录                 if ( ( SetCurrentDirectory( path ) ) )                 {                     SearchFolder( path );                 }                                    //插入文件及路径名到列表框m_listbox_hwnd中                    SendMessage( m_listbox_hwnd, LB_ADDSTRING, 0, path ); //-- INSERT WHAT YOU WANT DONE HERE!             }         }         while ( FindNextFile ( hFind, FindFileData ) hFind ! INVALID_HAND LE_VALUE ); FindClose ( hFind ); } 8.    如何禁止/启用系统热键 bool bOld; l    禁止系统热键 //屏蔽掉系统键 SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,true,bOld,SPIF_UPDATEINIFILE); l    启用系统热键 //恢复系统热键     SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,false,bOld,SPIF_UPDATEINIFILE) ; 9.    如何隐藏/显示WINDOWS系统任务栏 l    隐藏系统任务栏 //隐藏WINDOWS系统任务栏     ::ShowWindow (::FindWindow(Shell_TrayWnd,NULL),SW_HIDE); l    显示系统任务栏 //恢复WINDOWS系统任务栏正常显示 ::ShowWindow (::FindWindow(Shell_TrayWnd,NULL),SW_SHOW); 10.    如何实现窗口到系统区图标间的动画效果 //**************************************************************************** **** //* 名称FindTrayWnd //* 作者徐景周(jingzhou_xu163.net) //* 功能在显示窗体动画效果前先寻找系统区位置 //**************************************************************************** ****     BOOL CALLBACK FindTrayWnd(HWND hwnd, LPARAM lParam) {     TCHAR szClassName[256];     GetClassName(hwnd, szClassName, 255); // 比较窗口类名     if (_tcscmp(szClassName, _T(TrayNotifyWnd)) 0)     {         CRect *pRect (CRect*) lParam;         ::GetWindowRect(hwnd, pRect);         return TRUE;     } // 当找到时钟窗口时表示可以结束了     if (_tcscmp(szClassName, _T(TrayClockWClass)) 0)     {         CRect *pRect (CRect*) lParam;         CRect rectClock;         ::GetWindowRect(hwnd, rectClock);         pRect-right rectClock.left;         return FALSE;     } return TRUE; } //**************************************************************************** **** //* 名称WinAnimation //* 作者徐景周(jingzhou_xu163.net) //* 功能显示窗口动画效果的涵数 //**************************************************************************** **** void CScreenSnapDlg::WinAnimation(BOOL ShowFlag)  {     CRect rect(0,0,0,0); // 查找托盘窗口      CWnd* pWnd FindWindow(Shell_TrayWnd, NULL);     if (pWnd)     {         pWnd-GetWindowRect(rect);         EnumChildWindows(pWnd-m_hWnd, FindTrayWnd, (LPARAM)rect);         //rect 为托盘区矩形         CRect rcWnd;         GetWindowRect(rcWnd);         if(ShowFlag)                    //窗体滑向系统区           DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,rcWnd,rect);         else                            //窗体从系统区滑出           DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,rect,rcWnd);     } } 用法如下 if(IsWindowVisible())                 //窗体是否已隐藏 {     ShowWindow(SW_HIDE);           //先隐藏窗体     WinAnimation(true);                 //窗体动画滑入到系统区中  } else { WinAnimation(false);         //窗体动画从系统区滑出      ShowWindow(SW_SHOW); } 11.    如何判断当前操作系统的版本 //---------------------------------------------------------------------------- -------------------- //判断操作系统涵数及变量jingzhou xu typedef enum tagWin32SysType{     Windows32s,     WindowsNT3,     Windows95,     Windows98,     WindowsME,     WindowsNT4,     Windows2000,     WindowsXP }Win32SysType; //判断操作系统涵数及变量jingzhou xu Win32SysType IsShellSysType() {     Win32SysType  ShellType;     DWORD winVer;     OSVERSIONINFO *osvi;          winVerGetVersion();     if(winVer0x80000000){/*NT */         ShellTypeWindowsNT3;         osvi (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));         if (osvi!NULL){             memset(osvi,0,sizeof(OSVERSIONINFO));             osvi-dwOSVersionInfoSizesizeof(OSVERSIONINFO);             GetVersionEx(osvi);             if(osvi-dwMajorVersion4L)ShellTypeWindowsNT4;             else if(osvi-dwMajorVersion5Losvi-dwMinorVersion0L)ShellTy peWindows2000;             else if(osvi-dwMajorVersion5Losvi-dwMinorVersion1L)ShellTy peWindowsXP;             free(osvi);         }     }     else if  (LOBYTE(LOWORD(winVer))4)         ShellTypeWindows32s;     else{         ShellTypeWindows95;         osvi (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));         if (osvi!NULL){             memset(osvi,0,sizeof(OSVERSIONINFO));             osvi-dwOSVersionInfoSizesizeof(OSVERSIONINFO);             GetVersionEx(osvi);             if(osvi-dwMajorVersion4Losvi-dwMinorVersion10L)ShellTypeW indows98;             else if(osvi-dwMajorVersion4Losvi-dwMinorVersion90L)ShellT ypeWindowsME;             free(osvi);         }     } return ShellType; } //---------------------------------------------------------------------------- -------------------- 12.    如何在指定矩形框内水平/垂直显示多行文字 /// //说明 //  在矩形框中水平或垂直显示多行文字jingzhou xu. //  lMode: 排列方式0:水平方式; 1:垂直对齐     //  lHori: 水平对齐方式, 0:左对齐; 1:居中; 2:右对齐; 3自定义 //  lVert: 垂直对齐方式, 0:顶对齐; 1:居中; 2:底对齐; 3自定义 /// CRect DrawTitleInRect(CDC *pDC, CString szString, LPRECT lpRect, long lMode, l ong lHori, long lVert) {     TEXTMETRIC tm;     pDC-GetTextMetrics(tm);     int tmpWidthtm.tmAveCharWidth, tmpHeighttm.tmHeight; CRect rcInner(lpRect);     if(lMode0)     {         rcInner.lefttmpWidth;         rcInner.right-tmpWidth;         rcInner.top-tmpWidth;         rcInner.bottomtmpWidth;     }     if(lMode1)     {         rcInner.lefttmpWidth;         rcInner.rightrcInner.lefttmpWidth;         rcInner.top-tmpWidth;         rcInner.bottomtmpWidth;     } pDC-DrawText(szString, rcInner,DT_CALCRECT); switch(lHori)     {     case 0:         break;     case 1:         {             long xOutCent(lpRect-rightlpRect-left)/2;             long xInnCent(rcInner.rightrcInner.left)/2;             rcInner.left(xOutCent-xInnCent);             rcInner.right(xOutCent-xInnCent);         }         break;     case 2:         {             long lInWidthrcInner.right-rcInner.left;             rcInner.rightlpRect-right-tmpWidth;             rcInner.leftrcInner.right-lInWidth;         }         break;     default:         break;     }          switch(lVert)     {     case 0:         break;     case 1:         {             long yOutCent(lpRect-bottomlpRect-top)/2;             long yInnCent(rcInner.bottomrcInner.top)/2;             rcInner.top-(yInnCent-yOutCent);             rcInner.bottom-(yInnCent-yOutCent);         }         break;     case 2:         {             long lInHeighrcInner.top-rcInner.bottom;             rcInner.bottomlpRect-bottomtmpWidth;             rcInner.toprcInner.bottomlInHeigh;         }         break;     default:         break;     } //------------------------------------------------------------------------ ---------------------     //功能根据新、老矩形重新计算行数使文字多行显示,jingzhou xu     //------------------------------------------------------------------------ ---------------------     //一行中最大字符数     int nMaxLineChar abs(lpRect-right - lpRect-left) / tmpWidth ;        //记录当前行的宽度     short theLineLength0;      //记录当前行中汉字字节数以防止将一半汉字分为两行     unsigned short halfChinese0; for(int i0; iszString.GetLength()-1; i)     {         if(((unsigned char)szString.GetAt(i) 0x0d) ((unsigned char)szStr ing.GetAt(i1) 0x0a))             theLineLength0; //大于0xa1的字节为汉字字节         if((unsigned char)szString.GetAt(i) 0xA1)             halfChinese;         theLineLength; //如果行宽大于每行最大宽度进行特殊处理         if(theLineLength nMaxLineChar)         {             //防止将一个汉字分为两行回溯             if(halfChinese%2)             {                 szString.Insert(i,(unsigned char)0x0a);                 szString.Insert(i,(unsigned char)0x0d);             }             else             {                 szString.Insert(i-1,(unsigned char)0x0a);                 szString.Insert(i-1,(unsigned char)0x0d);             }                          theLineLength 0;         }     } //重新计算矩形边界范围 //    int tmpLine int(abs(szString.GetLength()*tmpWidth / abs(lpRect-right  - lpRect-left)-0.5)); //    tmpLine (szString.GetLength()*tmpWidth % abs(lpRect-right - lpRect- left))? 1 : 0; //    if(tmpLine 0) //        tmpLine 1;     if(rcInner.bottom lpRect-bottom)         rcInner.bottom lpRect-bottom;     if(rcInner.top lpRect-top)         rcInner.top lpRect-top; //------------------------------------------------------------------------ --------------------- if(lHori0)         pDC-DrawText(szString, rcInner, DT_WORDBREAK|DT_LEFT);     else if(lHori1)         pDC-DrawText(szString, rcInner, DT_WORDBREAK|DT_CENTER);     else if(lHori2)         pDC-DrawText(szString, rcInner, DT_WORDBREAK|DT_RIGHT); return rcInner; } 13.    如何在指定矩形中旋转显示文字 /// //说明 //  在矩形框中旋转方式显示文字jingzhou xu //参数      //  pDC:        DC指针 //  str:        显示文字 //  rect:        显示范围 //  angle:        旋转角度 //    nOptions:    ExtTextOut()中相应设置ETO_CLIPPED 和 ETO_OPAQUE /// void DrawRotatedText(CDC* pDC, const CString str, CRect rect,                       double angle, UINT nOptions) {    //按比例转换角度值    double pi 3.141592654;    double radian pi * 2 / 360 * angle; //获取显示文字中心点    CSize TextSize pDC-GetTextExtent(str);    CPoint center;    center.x TextSize.cx / 2;    center.y TextSize.cy / 2; //计算显示文字新的中心点    CPoint rcenter;    rcenter.x long(cos(radian) * center.x - sin(radian) * center.y);    rcenter.y long(sin(radian) * center.x cos(radian) * center.y); //绘制文字    pDC-SetTextAlign(TA_BASELINE);    pDC-SetBkMode(TRANSPARENT);    pDC-ExtTextOut(rect.left rect.Width() / 2 - rcenter.x,                     rect.top rect.Height() / 2 rcenter.y,                    nOptions, rect, str, NULL); } 14.    如何将32 x 32像素图标转换为16 x 16像素值的图标 HICON Convert32x32IconTo16x16(HICON h32x32Icon) {   HDC hMainDC, hMemDC1, hMemDC2;   HICON h16x16Icon;   BITMAP bmp;   HBITMAP hOldBmp1, hOldBmp2;   ICONINFO IconInfo32x32, IconInfo16x16; GetIconInfo(h32x32Icon, IconInfo32x32); hMainDC ::GetDC(m_hWnd);   hMemDC1 CreateCompatibleDC(hMainDC);   hMemDC2 CreateCompatibleDC(hMainDC); GetObject(IconInfo32x32.hbmColor, sizeof(BITMAP), bmp); IconInfo16x16.hbmColor CreateBitmap( 16, 16,                                           bmp.bmPlanes,                                          bmp.bmBitsPixel,                                          NULL); hOldBmp1 (HBITMAP) SelectObject( hMemDC1,                                       IconInfo32x32.hbmColor);   hOldBmp2 (HBITMAP) SelectObject( hMemDC2,                                      IconInfo16x16.hbmColor); StretchBlt(hMemDC2,        0, 0,        16, 16,        hMemDC1,        0, 0,        32, 32,        SRCCOPY        ); GetObject(IconInfo32x32.hbmMask, sizeof(BITMAP), bmp); IconInfo16x16.hbmMask CreateBitmap( 16, 16,                                          bmp.bmPlanes,                                          bmp.bmBitsPixel,                                         NULL); SelectObject(hMemDC1, IconInfo32x32.hbmMask);   SelectObject(hMemDC2, IconInfo16x16.hbmMask); StretchBlt(hMemDC2,              0, 0,              16, 16,              hMemDC1,              0, 0,              32, 32,              SRCCOPY        ); SelectObject(hMemDC1, hOldBmp1);   SelectObject(hMemDC2, hOldBmp2); IconInfo16x16.fIcon TRUE;   h16x16Icon CreateIconIndirect(IconInfo16x16); DeleteObject(IconInfo32x32.hbmColor);   DeleteObject(IconInfo16x16.hbmColor);   DeleteObject(IconInfo32x32.hbmMask);   DeleteObject(IconInfo16x16.hbmMask);   DeleteDC(hMemDC1);   DeleteDC(hMemDC2);   ::ReleaseDC(m_hWnd, hMainDC); return h16x16Icon; } 15.    如何建立一个灰度级图标 HICON CreateGrayscaleIcon(HICON hIcon) {   HICON       hGrayIcon NULL;   HDC         hMainDC NULL,                hMemDC1 NULL,                hMemDC2 NULL;   BITMAP      bmp;   HBITMAP     hOldBmp1 NULL,               hOldBmp2 NULL;   ICONINFO    csII, csGrayII;   BOOL        bRetValue FALSE; bRetValue ::GetIconInfo(hIcon, csII);   if (bRetValue FALSE) return NULL; hMainDC ::GetDC(m_hWnd);   hMemDC1 ::CreateCompatibleDC(hMainDC);   hMemDC2 ::CreateCompatibleDC(hMainDC);   if (hMainDC NULL ||      hMemDC1 NULL ||     hMemDC2 NULL)        return NULL; if (::GetObject(csII.hbmColor,                  sizeof(BITMAP),                 amp;bmp))   {     csGrayII.hbmColor            ::CreateBitmap(csII.xHotspot*2,                         csII.yHotspot*2,                          bmp.bmPlanes,                          bmp.bmBitsPixel,                          NULL);     if (csGrayII.hbmColor)     {       hOldBmp1          (HBITMAP)::SelectObject(hMemDC1,                                  csII.hbmColor);       hOldBmp2            (HBITMAP)::SelectObject(hMemDC2,                                  csGrayII.hbmColor); ::BitBlt(hMemDC2, 0, 0, csII.xHotspot*2,                csII.yHotspot*2, hMemDC1, 0, 0,                SRCCOPY); DWORD    dwLoopY 0, dwLoopX 0;       COLORREF crPixel 0;       BYTE     byNewPixel 0; for (dwLoopY 0; dwLoopY csII.yHotspot*2; dwLoopY)       {         for (dwLoopX 0; dwLoopX csII.xHotspot*2; dwLoopX)         {           crPixel ::GetPixel(hMemDC2, dwLoopX, dwLoopY); byNewPixel (BYTE)((GetRValue(crPixel) * 0.299)                (GetGValue(crPixel) * 0.587)                (GetBValue(crPixel) * 0.114));           if (crPixel) ::SetPixel(hMemDC2,                                   dwLoopX,                                   dwLoopY,                                   RGB(byNewPixel,                                   byNewPixel,                                   byNewPixel));         } // for       } // for ::SelectObject(hMemDC1, hOldBmp1);       ::SelectObject(hMemDC2, hOldBmp2); csGrayII.hbmMask csII.hbmMask; csGrayII.fIcon TRUE;       hGrayIcon ::CreateIconIndirect(csGrayII);     } // if ::DeleteObject(csGrayII.hbmColor);     //::DeleteObject(csGrayII.hbmMask);   } // if ::DeleteObject(csII.hbmColor);   ::DeleteObject(csII.hbmMask);   ::DeleteDC(hMemDC1);   ::DeleteDC(hMemDC2);   ::ReleaseDC(m_hWnd, hMainDC); return hGrayIcon; } 16.    如何按指定角度旋转显示内存位图(用法和BitBlt类似) void RotBlt(HDC destDC, int srcx1, int srcy1, int srcx2, int srcy2,   HDC srcDC , int destx1, int desty1 ,int thetaInDegrees ,DWORD mode) {   double theta thetaInDegrees * (3.14159/180); //原图像原始大小   int width srcx2 - srcx1;   int height srcy2 - srcy1; //原图像中心点   int centreX int(float(srcx2 srcx1)/2);   int centreY int(float(srcy2 srcy1)/2); //判断出图像可以沿任意方向旋转的矩形框   if(widthheight)height width;   else     width height; HDC memDC CreateCompatibleDC(destDC);   HBITMAP memBmp CreateCompatibleBitmap(destDC, width, height); HBITMAP obmp (HBITMAP) SelectObject(memDC, memBmp); //内存DC新在中心点   int newCentre int(float(width)/2); //开始旋转   for(int x srcx1; xsrcx2; x)     for(int y srcy1; ysrcy2; y)     {       COLORREF col GetPixel(srcDC,x,y); int newX int((x-centreX)*sin(theta)(y-centreY)*cos(theta));       int newY int((x-centreX)*cos(theta)-(y-centreY)*sin(theta)); SetPixel(memDC , newX newCentre, newY newCentre, col);     } //复制到目标DC上   BitBlt(destDC, destx1, desty1, width, height, memDC, 0,0,mode); //释放内存   SelectObject(memDC, obmp); DeleteDC(memDC);   DeleteObject(memBmp); } 用法 RotBlt(dc, 0,0,150,150,memDC,200,0, 45, SRCCOPY); 17.    如何将指定的窗体以位图形式复制到系统剪切板上 void CScreenSnapDlg::toClipboard_Bio(CWnd * wnd, BOOL FullWnd) {      CDC *dc;      if(FullWnd)         { /* 抓取整个窗口 */          dc new CWindowDC(wnd);         } /* 抓取整个窗口 */      else         { /* 仅抓取客户区时 */          dc new CClientDC(wnd);         } /* 仅抓取客户区时 */ CDC memDC;      memDC.CreateCompatibleDC(dc); CBitmap bm;      CRect r;      if(FullWnd)         wnd-GetWindowRect(r);      else          wnd-GetClientRect(r); CString s;      wnd-GetWindowText(s);      CSize sz(r.Width(), r.Height());      bm.CreateCompatibleBitmap(dc, sz.cx, sz.cy);      CBitmap * oldbm memDC.SelectObject(bm);      memDC.BitBlt(0, 0, sz.cx, sz.cy, dc, 0, 0, SRCCOPY); //直接调用OpenClipboard()而不用wnd-GetParent()-OpenClipboard();      wnd-OpenClipboard(); ::EmptyClipboard();      ::SetClipboardData(CF_BITMAP, bm.m_hObject);      CloseClipboard(); //恢复原始环境      memDC.SelectObject(oldbm);      bm.Detach();  delete dc; } 18.    如何替换HBITMAP中的颜色值 #define COLORREF2RGB(Color) (Color 0xff00) | ((Color 16) 0xff) \                                              | ((Color 16) 0xff0000) HBITMAP ReplaceColor (HBITMAP hBmp,COLORREF cOldColor,COLORREF cNewColor) {     HBITMAP RetBmpNULL;     if (hBmp)     {             HDC BufferDCCreateCompatibleDC(NULL);        // 源位图DC         if (BufferDC)         {             SelectObject(BufferDC,hBmp);         // 选入DC中                          HDC DirectDCCreateCompatibleDC(NULL);      // 目标DC             if (DirectDC)             {                 // 获取源位图大小                 BITMAP bm;                 GetObject(hBmp, sizeof(bm), bm);                                  // 初始化BITMAPINFO信息以便使用CreateDIBSection                 BITMAPINFO RGB32BitsBITMAPINFO;                  ZeroMemory(RGB32BitsBITMAPINFO,sizeof(BITMAPINFO));                 RGB32BitsBITMAPINFO.bmiHeader.biSizesizeof(BITMAPINFOHEADER); RGB32BitsBITMAPINFO.bmiHeader.biWidthbm.bmWidth;                 RGB32BitsBITMAPINFO.bmiHeader.biHeightbm.bmHeight;                 RGB32BitsBITMAPINFO.bmiHeader.biPlanes1;                 RGB32BitsBITMAPINFO.bmiHeader.biBitCount32;                 UINT * ptPixels;    HBITMAP DirectBitmap CreateDIBSection(DirectDC,                                               (BITMAPINFO *)RGB32BitsBITMAPIN FO,                                                DIB_RGB_COLORS,(void **)ptPixel s, NULL, 0);                 if (DirectBitmap)                 {                     HGDIOBJ PreviousObjectSelectObject(DirectDC, DirectBitmap );                     BitBlt(DirectDC,0,0,bm.bmWidth,bm.bmHeight,BufferDC,0,0,SR CCOPY); // 转换 COLORREF 为 RGB                     cOldColorCOLORREF2RGB(cOldColor);                     cNewColorCOLORREF2RGB(cNewColor); // 替换颜色                     for (int i((bm.bmWidth*bm.bmHeight)-1);i0;i--)                     {                         if (ptPixels[i]cOldColor) ptPixels[i]cNewColor;                     }                                          // 修改位图 DirectBitmap                     SelectObject(DirectDC,PreviousObject);                                          // 完成                     RetBmpDirectBitmap;                 }                 // 释放DC                 DeleteDC(DirectDC);             }             // 释放DC             DeleteDC(BufferDC);         }     }     return RetBmp; } 用法 HBITMAP hBmp2 LoadBitmap(g_hinstance,MAKEINTRESOURCE(IDB_SAMPLEBITMAP)); HBITMAP hBmp ReplaceColor(hBmp2,0xff0000,0x00ff00); // 替换蓝色为绿色 ...... DeleteObject(hBmp2); DeleteObject(hBmp); 19.    如何转换并保存位图 //**************************************************************************** **** //* 名称DDBToDIB //* 作者徐景周(jingzhou_xu163.net) //* 功能设备相关转换为设备无关位图 //**************************************************************************** **** HANDLE CScreenSnapDlg::DDBToDIB( CBitmap bitmap, DWORD dwCompression /* BI_ RGB */)  {     BITMAP                bm;     BITMAPINFOHEADER    bi;     LPBITMAPINFOHEADER  lpbi;     DWORD                dwLen;     HANDLE                hDIB;     HANDLE                handle;     HDC                    hDC;     HPALETTE            hPal; CWindowDC            dc( this );     CPalette            pal;     //如果支持调色板的话则建立它     if( dc.GetDeviceCaps( RASTERCAPS ) RC_PALETTE )     {         UINT        nSize   sizeof(LOGPALETTE) ( sizeof(PALETTEENTRY) * 25 6 );         LOGPALETTE* pLP     (LOGPALETTE*)new BYTE[nSize];         pLP-palVersion     0x300;         pLP-palNumEntries (unsigned short)GetSystemPaletteEntries( dc, 0, 2 55,          pLP-palPalEntry ); pal.CreatePalette( pLP ); //释放         delete[] pLP;     } ASSERT( bitmap.GetSafeHandle() ); //不支持BI_BITFIELDS类型     if( dwCompression BI_BITFIELDS )         return NULL; //如果调色板为空则用默认调色板     hPal (HPALETTE) pal.GetSafeHandle();     if (hPalNULL)         hPal (HPALETTE) GetStockObject(DEFAULT_PALETTE); //获取位图信息     bitmap.GetObject(sizeof(bm),(LPSTR)bm); //初始化位图信息头     bi.biSize        sizeof(BITMAPINFOHEADER);     bi.biWidth        bm.bmWidth;     bi.biHeight         bm.bmHeight;     bi.biPlanes         1;     bi.biBitCount        (unsigned short)(bm.bmPlanes * bm.bmBitsPixel) ;     bi.biCompression    dwCompression;     bi.biSizeImage        0;     bi.biXPelsPerMeter    0;     bi.biYPelsPerMeter    0;     bi.biClrUsed        0;     bi.biClrImportant    0; //计算信息头及颜色表大小     int nColors 0;     if(bi.biBitCount 8)         {         nColors (1 bi.biBitCount);         }     dwLen  bi.biSize nColors * sizeof(RGBQUAD); hDC ::GetDC(NULL);     hPal SelectPalette(hDC,hPal,FALSE);     RealizePalette(hDC); //为信息头及颜色表分配内存     hDIB GlobalAlloc(GMEM_FIXED,dwLen); if (!hDIB){         SelectPalette(hDC,hPal,FALSE);         ::ReleaseDC(NULL,hDC);         return NULL;     } lpbi (LPBITMAPINFOHEADER)GlobalLock(hDIB); *lpbi bi; //调用 GetDIBits 计算图像大小     GetDIBits(hDC, (HBITMAP)bitmap.GetSafeHandle(), 0L, (DWORD)bi.biHeight,             (LPBYTE)NULL, (LPBITMAPINFO)lpbi, (DWORD)DIB_RGB_COLORS); bi *lpbi; //图像的每一行都对齐(32bit)边界     if (bi.biSizeImage 0){         bi.biSizeImage ((((bi.biWidth * bi.biBitCount) 31) ~31) / 8)                          * bi.biHeight; if (dwCompression ! BI_RGB)             bi.biSizeImage (bi.biSizeImage * 3) / 2;     } //重新分配内存大小以便放下所有数据     dwLen bi.biSizeImage;     handle GlobalReAlloc(hDIB, dwLen, GMEM_MOVEABLE) ;     if (handle ! NULL)         hDIB handle;     else         {         GlobalFree(hDIB); //重选原始调色板         SelectPalette(hDC,hPal,FALSE);         ::ReleaseDC(NULL,hDC);         return NULL;         } //获取位图数据     lpbi (LPBITMAPINFOHEADER)hDIB; //最终获得的DIB     BOOL bGotBits GetDIBits( hDC, (HBITMAP)bitmap.GetSafeHandle(),                 0L,                      //扫描行起始处                 (DWORD)bi.biHeight,      //扫描行数                 (LPBYTE)lpbi             //位图数据地址                 (bi.biSize nColors * sizeof(RGBQUAD)),                 (LPBITMAPINFO)lpbi,      //位图信息地址                 (DWORD)DIB_RGB_COLORS);  //颜色板使用RGB if( !bGotBits )     {         GlobalFree(hDIB);                  SelectPalette(hDC,hPal,FALSE);         ::ReleaseDC(NULL,hDC);         return NULL;     } SelectPalette(hDC,hPal,FALSE);     ::ReleaseDC(NULL,hDC);     return hDIB; } //**************************************************************************** **** //* 名称SaveBitmapToFile //* 修改徐景周(jingzhou_xu163.net) //* 功能保存为位图文件 //**************************************************************************** **** BOOL CScreenSnapDlg::SaveBitmapToFile(HBITMAP hBitmap , CString lpFileName)  {              HDC                hDC;                            //设备描述表       int                iBits;                            //当前显示分辨率下每个 像素所占字节数     WORD            wBitCount;                        //位图中每个像素所占字节 数     DWORD           dwPaletteSize0,                //定义调色板大小 位图中像 素字节大小 位图文件大小 写入文件字节数                     dwBmBitsSize,                     dwDIBSize, dwWritten;     BITMAP          Bitmap;             BITMAPFILEHEADER   bmfHdr;                        //位图属性结构         BITMAPINFOHEADER   bi;                            //位图文件头结构       LPBITMAPINFOHEADER lpbi;                        //位图信息头结构          HANDLE          fh, hDib, hPal,hOldPalNULL;    //指向位图信息头结构,定义文 件分配内存句柄调色板句柄       //计算位图文件每个像素所占字节数    hDC CreateDC(DISPLAY,NULL,NULL,NULL);    iBits GetDeviceCaps(hDC, BITSPIXEL) *     GetDeviceCaps(hDC, PLANES);    DeleteDC(hDC);    if (iBits 1)       wBitCount 1;    else if (iBits 4)       wBitCount 4;    else if (iBits 8)       wBitCount 8;    else if (iBits 24)       wBitCount 24;    //计算调色板大小    if (wBitCount 8)       dwPaletteSize (1 wBitCount) *sizeof(RGBQUAD);        //设置位图信息头结构    GetObject(hBitmap, sizeof(BITMAP), (LPSTR)Bitmap);    bi.biSize            sizeof(BITMAPINFOHEADER);    bi.biWidth           Bitmap.bmWidth;    bi.biHeight          Bitmap.bmHeight;    bi.biPlanes          1;    bi.biBitCount         wBitCount;    bi.biCompression      BI_RGB;    bi.biSizeImage        0;    bi.biXPelsPerMeter     0;    bi.biYPelsPerMeter     0;    bi.biClrUsed         0;    bi.biClrImportant      0; dwBmBitsSize ((Bitmap.bmWidth *     wBitCount31)/32)* 4      *Bitmap.bmHeight ; //为位图内容分配内存    hDib  GlobalAlloc(GHND,dwBmBitsSize     dwPaletteSizesizeof(BITMAPINFOHEADER));    lpbi (LPBITMAPINFOHEADER)GlobalLock(hDib);    *lpbi bi; // 处理调色板       hPal GetStockObject(DEFAULT_PALETTE);    if (hPal)    {        hDC  ::GetDC(NULL);        hOldPal SelectPalette(hDC, (HPALETTE)hPal, FALSE);        RealizePalette(hDC);    } // 获取该调色板下新的像素值    GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight,      (LPSTR)lpbi sizeof(BITMAPINFOHEADER)dwPaletteSize,      (LPBITMAPINFO)lpbi, DIB_RGB_COLORS); //恢复调色板       if (hOldPal)    {       SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);       RealizePalette(hDC);       ::ReleaseDC(NULL, hDC);    } //创建位图文件         fh CreateFile(lpFileName, GENERIC_WRITE,           0, NULL, CREATE_ALWAYS,          FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); if (fh INVALID_HANDLE_VALUE)       return FALSE; // 设置位图文件头    bmfHdr.bfType 0x4D42;  // BM    dwDIBSize    sizeof(BITMAPFILEHEADER) sizeof(BITMAPINFOHEADER) dwPale tteSize dwBmBitsSize;      bmfHdr.bfSize dwDIBSize;    bmfHdr.bfReserved1 0;    bmfHdr.bfReserved2 0;    bmfHdr.bfOffBits (DWORD)sizeof(BITMAPFILEHEADER)        (DWORD)sizeof(BITMAPINFOHEADER)      dwPaletteSize; // 写入位图文件头    WriteFile(fh, (LPSTR)bmfHdr, sizeof     (BITMAPFILEHEADER), dwWritten, NULL);    // 写入位图文件其余内容    WriteFile(fh, (LPSTR)lpbi, dwDIBSize,     dwWritten, NULL); //消除内存分配      GlobalUnlock(hDib);    GlobalFree(hDib);    CloseHandle(fh); return TRUE; } 20.    如何获取局域网上计算机名及它们的IP地址 l    连接ws2_32.lib和 mpr.lib库 l    #include winsock2.h CString strTemp; struct hostent *host; struct in_addr *ptr; // 检索IP地址 DWORD dwScope RESOURCE_CONTEXT; NETRESOURCE *NetResource NULL; HANDLE hEnum; WNetOpenEnum( dwScope, NULL, NULL,               NULL, hEnum ); WSADATA wsaData; WSAStartup(MAKEWORD(1,1),wsaData); if ( hEnum ) {     DWORD Count 0xFFFFFFFF;     DWORD BufferSize 2048;     LPVOID Buffer new char[2048];     WNetEnumResource( hEnum, Count,          Buffer, BufferSize );     NetResource (NETRESOURCE*)Buffer; char szHostName[200];     unsigned int i; for ( i 0;          i BufferSize/sizeof(NETRESOURCE);          i, NetResource )     {         if ( NetResource-dwUsage               RESOURCEUSAGE_CONTAINER               NetResource-dwType               RESOURCETYPE_ANY )         {             if ( NetResource-lpRemoteName )             {                 CString strFullName                       NetResource-lpRemoteName;                 if ( 0                       strFullName.Left(2).Compare(\\) )                        strFullName                           strFullName.Right(                             strFullName.GetLength()-2); gethostname( szHostName,                      strlen( szHostName ) );                 host gethostbyname(strFullName); if(host NULL) continue;                  ptr (struct in_addr *)                      host-h_addr_list[0];                    // . 分隔开IP:211.40.35.76.                              int a ptr-S_un.S_un_b.s_b1;  // 211                            int b ptr-S_un.S_un_b.s_b2;  // 40                 int c ptr-S_un.S_un_b.s_b3;  // 35                 int d ptr-S_un.S_un_b.s_b4;  // 76 strTemp.Format(%s --  %d.%d.%d.%d,                     strFullName,a,b,c,d);                 AfxMessageBox(strTemp);             }         }     } delete Buffer;     WNetCloseEnum( hEnum );  } WSACleanup();
http://www.hkea.cn/news/14286582/

相关文章:

  • 如何在ftp做网站网页制作与网站建设pdf
  • 企业网站建设教学湖南省郴州市有几个县
  • 房地产开发网站建设网站定制开发成本
  • wordpress快速仿站教程竞价推广代运营服务
  • 简单网站建设哪家便宜万网如何建设网站
  • 自己做书画交易网站google首页
  • 成立公司要多少钱厦门seo推广公司
  • 找网络公司做网站网站建设费用要摊销嘛
  • 河南网站建站系统平台做网站建设费用
  • wordpress 调用api郑州网站建设seo优化
  • 如何选择邯郸做网站wordpress本地搭建网站a
  • 企业品牌类网站建站cms源码
  • 石家庄网站建设排名工商企业信息查询网站
  • 济源网站建设公司怎么把做的网站发到网上去
  • 想做网站运营专员广州上宏网站建设
  • 怎么做秒赞网站陈列设计师培训
  • 自建电商网站有哪些广州安卓程序开发
  • 襄阳谷城网站开发WordPress 自动缩律图
  • 网站合作建设合同买链接做网站 利润高吗
  • 网站自动化采集如何检测wordpress后台慢的原因
  • 《关于加快网站群建设的通知》高端网站建设公司好吗
  • 网站建设与规划论文营销渠道策划方案
  • 网站建设概软件开发文档规范
  • wordpress设置显示为英文网站seo如何做好优化
  • 网站建设相关参考资料免费门户网站搭建
  • 厦门成品网站建筑资料网
  • 网站颜色视频网站后台功能
  • 视频网站建设多少钱ico网站进行推广
  • 怎样制作免费手机网站上门做网站公司哪家好
  • 深圳商业网站建设哪家专业如何上传wordpress程序