seals 大约2小时前 平静 的说 订做男女式西服,面料、款式可选,价格288-388,QQ:61582459   ☆绛珠草☆ 大约6小时前 高兴 的说 保真★原装★化妆品QQ群71872775长期超市价团购   xiaofanyy 10月10日 平静 的说 我的生活没颜色了。晕了。迷茫了。   小鱼游 10月10日 悲伤 的说 额,突然觉得人生失去了方向~~~~~   fay_meng 10月9日 平静 的说 冒泡下,提高知名度...   zdk6105 10月9日 平静 的说 哈哈,何为缘?聚散皆为缘   一堆泪水 10月9日 郁闷 的说 期待有缘人。。。   小鱼游 10月8日 平静 的说 干了一整天的活,好累哟   水木落 10月8日 平静 的说 9日8点40分,离校后第一次掠过杨凌。。。。。。   逍遥散人 10月6日 平静 的说 终于回杨凌了 心情还是那样没变化 闷了   [查看全部 330 条唧唧歪歪...]


打印

帮忙看个VC程序

帮忙看个VC程序

#include "GDISurface.h"
#include "GDIGraphicsDevice.h"

CGDISurface::CGDISurface()
{
   m_iWidth        = 0;
   m_iHeight        = 0;
   m_hBitmap        = NULL;
   m_hMaskBitmap     = NULL;
   m_hOldBitmap      = NULL;
   m_hOldMaskBitmap   = NULL;
   m_hDC          = NULL;            
   m_hMaskDC        = NULL;
}

CGDISurface::~CGDISurface()
{

}
bool CGDISurface::Create( CGDIGraphicsDevice *pDevice, int iWidth, int iHeight )
{
   // 获得主窗口绘图设备句柄
   HWND hWnd = pDevice->GetWnd();
   HDC hdcWindow = ::GetDC( hWnd );
   
   // 创建图形设备句柄
   m_hDC     = ::CreateCompatibleDC( hdcWindow );
   m_hMaskDC  = ::CreateCompatibleDC( hdcWindow );

   // 创建位图和透明位图
   m_hBitmap     = ::CreateCompatibleBitmap( hdcWindow, iWidth, iHeight );
   m_hMaskBitmap  = ::CreateBitmap( iWidth, iHeight, 1, 1, NULL );
   
   // 关联设备和位图句柄
   m_hOldBitmap      = (HBITMAP)::SelectObject( m_hDC, m_hBitmap );
   m_hOldMaskBitmap   = (HBITMAP)::SelectObject( m_hMaskDC, m_hMaskBitmap );

   // 制作透明通道位图
   ::SetBkColor( m_hDC, RGB(0,0,255) );
   ::BitBlt( m_hMaskDC, 0, 0, iWidth, iHeight, m_hDC, 0, 0, SRCCOPY );
   
   ::SetBkColor( m_hDC, RGB(0,0,0) );
   ::SetTextColor( m_hDC, RGB(255,255,255) );
   ::BitBlt( m_hDC, 0, 0, iWidth, iHeight, m_hMaskDC, 0, 0, SRCAND );

   // 释放主窗口绘图句柄
   ::ReleaseDC( hWnd, hdcWindow );

   // 保存表面大小
   m_iWidth   = iWidth;
   m_iHeight  = iHeight;

   return true;
}

//实现从文件读取位图, 方法和创建位图类似,只是原位图从文件用LoadImage读入。
// 从文件读取一个位图
bool CGDISurface::LoadBmp( CGDIGraphicsDevice *pDevice, const char *szFileName )
{
   
   FILE *fp =fopen( szFileName, "rb" );// 读取位图文件信息,确定位图大小
   if( NULL == fp )
   {
      OutputDebugString( FSTR( "Open bmp file [%s] failed(%s:%d)", szFileName, __FILE__, __LINE__ ) );
      return false;
   }

   BITMAPFILEHEADER bmfh;
   BITMAPINFOHEADER bmih;

   fread( &bmfh, sizeof(BITMAPFILEHEADER), 1, fp );
   fread( &bmih, sizeof(BITMAPINFOHEADER), 1, fp );

   fclose(fp);
   
   // 如果不是位图则返回失败
   if( bmfh.bfType != 0x4D42 )
   {
      OutputDebugString( FSTR( "the bmp file [%s] type is failed(%s:%d)", szFileName, __FILE__, __LINE__ ) );
      return false;
   }

   HBITMAP hBmp = (HBITMAP)::LoadImage(NULL, szFileName, IMAGE_BITMAP, bmih.biWidth, bmih.biHeight, LR_LOADFROMFILE | LR_CREATEDIBSECTION );

   m_iWidth   = bmih.biWidth;
   m_iHeight  = bmih.biHeight;

   HWND hWnd = pDevice->GetWnd();
   HDC hdcWindow = ::GetDC( hWnd );

   m_hBitmap     = ::CreateCompatibleBitmap( hdcWindow, m_iWidth, m_iHeight );
   m_hMaskBitmap  = ::CreateBitmap( m_iWidth, m_iHeight, 1, 1, NULL );

   HDC hTempDC = ::CreateCompatibleDC( hdcWindow );
   m_hDC     = ::CreateCompatibleDC( hdcWindow );
   m_hMaskDC  = ::CreateCompatibleDC( hdcWindow );

   HBITMAP hOldBitmap  = (HBITMAP)::SelectObject( hTempDC, hBmp );
   m_hOldBitmap      = (HBITMAP)::SelectObject( m_hDC, m_hBitmap );
   m_hOldMaskBitmap   = (HBITMAP)::SelectObject( m_hMaskDC, m_hMaskBitmap );

   ::BitBlt( m_hDC, 0, 0, m_iWidth, m_iHeight, hTempDC, 0, 0, SRCCOPY );

   ::SetBkColor( m_hDC, RGB(0,0,255) );
   ::BitBlt( m_hMaskDC, 0, 0, m_iWidth, m_iHeight, m_hDC, 0, 0, SRCCOPY );

   ::SetBkColor( m_hDC, RGB(0,0,0) );
   ::SetTextColor( m_hDC, RGB(255,255,255) );
   ::BitBlt( m_hDC, 0, 0, m_iWidth, m_iHeight, m_hMaskDC, 0, 0, SRCAND );

   ::SelectObject( hTempDC, hOldBitmap );
   DeleteDC( hTempDC );
   DeleteObject( hBmp );

   ::ReleaseDC( hWnd, hdcWindow );

   return true;
}

//实现释放位图
// 释放位图
void CGDISurface::Release()
{
   ::SelectObject( m_hDC, m_hOldBitmap );
   ::SelectObject( m_hMaskDC, m_hOldMaskBitmap );
   ::DeleteDC( m_hMaskDC );
   ::DeleteDC( m_hDC );
   ::DeleteObject( m_hBitmap );
   ::DeleteObject( m_hMaskBitmap );
}

//实现4个基本绘图操作
// 清除表面为 某种颜色
void CGDISurface::Clear( COLORREF c )
{
   // 创建填充画笔
   HBRUSH hBrush = CreateSolidBrush( c );

   // 填充整个表面
   RECT rect = { 0, 0, m_iWidth, m_iHeight };
   FillRect( m_hDC, &rect, hBrush );

   // 释放画笔
   DeleteObject( hBrush );
}

// 画店
void CGDISurface::SetPixel( int x, int y, COLORREF c )
{
   ::SetPixel( m_hDC, x, y, c );
}

// 画线
void CGDISurface::Line( int x1, int y1, int x2, int y2, COLORREF c )
{
   HPEN hPen = CreatePen(PS_SOLID, 1, c );
   HPEN hOldPen = (HPEN)SelectObject( m_hDC, hPen );

   MoveToEx( m_hDC, x1, y1, (LPPOINT) NULL );
   LineTo( m_hDC, x2, y2 );

   SelectObject( m_hDC, hOldPen );
   DeleteObject( hPen );
}

// 画矩形
void CGDISurface::Rect( int x1, int y1, int x2, int y2, COLORREF c )
{
   // 画4条线 矩形边框
   Line( x1, y1, x2, y1, c );
   Line( x1, y2, x2, y2, c );
   Line( x1, y1, x1, y2, c );
   Line( x2, y1, x2, y2, c );
}

//实现位图传送功能
// 位图传送
void CGDISurface::Blt( CGDISurface *pSurface, int x, int y, int rx, int ry, int w, int h, SurfaceBltMode iMode )
{
   HDC hdcDst = pSurface->GetDC();
   switch( iMode )
   {
   case BLT_BLOCK:
      // 基本复制方式传送位图
      BitBlt( hdcDst, x, y, w, h, m_hDC, rx, ry, SRCCOPY );
      break;
   case BLT_ALPHATEST:
      // 带透明色方式传送位图
      SetBkColor( hdcDst, RGB(255,255,255) );
      SetTextColor( hdcDst, RGB(0,0,0) );
      BitBlt( hdcDst, x, y, w, h, m_hMaskDC, rx, ry, SRCAND );
      BitBlt( hdcDst, x, y, w, h, m_hDC, rx, ry, SRCPAINT );
      break;
   case BLT_ALPHABLEND:
      break;
   }
}
  在头文件中已经包含了对WINDOWS。H的引用。
  这个程序在连接的时候出现7个错误,全部是关于文件操作的错误。例如 FILE ,fopen,fclose等。系统说没有对这些常量和函数进行定义。
  大家帮忙看看,谢谢。

TOP

你试了包下<stdio.h>吗?
http://blog.csdn.net/thisisll/ http://spaces.msn.com/thisisll/

TOP

把错误提示的内容写上好吗?

TOP

不懂

TOP

包含头文件windef.h, 试下

TOP