VC中图像控件的用法与总结
VC6.0中控件及按钮的设置和使用

VC6.0中控件及按钮的设置和使用VC学习笔记1:按钮的使能与禁止用ClassWizard的Member Variables为按钮定义变量,如:m_Button1;则m_Button1.EnableWindow(true); 使按钮处于允许状态m_Button1.EnableWindow(false); 使按钮被禁止,并变灰显示VC学习笔记2:控件的隐藏与显示用CWnd类的函数BOOL ShowWindow(int nCmdShow)可以隐藏或显示一个控件。
例1:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_HIDE ); //隐藏控件例2:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_SHOW ); //显示控件以上方法常用于动态生成控件,虽说用控件的Create函数可以动态生成控件,但这种控件很不好控制,所以用隐藏、显示方法不失为一种替代手段。
VC学习笔记3:改变控件的大小和位置用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置。
void MoveWindow(int x,int y,int nWidth,int nHeight);void MoveWindow(LPCRECT lpRect);第一种用法需给出控件新的坐标和宽度、高度;第二种用法给出存放位置的CRect对象;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号pWnd->MoveWindow( CRect(0,0,100,100) ); //在窗口左上角显示一个宽100、高100的编辑控件SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);第一个参数我不会用,一般设为NULL;x、y控件位置;cx、cy控件宽度和高度;nFlags常用取值:SWP_NOZORDER:忽略第一个参数;SWP_NOMOVE:忽略x、y,维持位置不变;SWP_NOSIZE:忽略cx、cy,维持大小不变;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_BUTTON1 ); //获取控件指针,IDC_BUTTON1为控件ID号pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE ); //把按钮移到窗口的(50,80)处pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE ); //把编辑控件的大小设为(100,80),位置不变pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ) ; //编辑控件的大小和位置都改变以上方法也适用于各种窗口。
VC++图像应用——图像显示

VC++图像应用指南一——图像显示一、设备上下文中绘制图像1.穿建一个单文档/视图结构的应用程序2.1在视图类的OnDraw编写如下代码1.点击文件→选择新建→选择MFC APP ;填写工程名;点击确认→2.选择单文档→点击完成void COUtView::OnDraw(CDC* pDC){COUtDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CDC memDC;memDC.CreateCompatibleDC(pDC);CBitmap bmp;bmp.LoadBitmap(IDB_BKBITMAP);memDC.SelectObject(&bmp);pDC->BitBlt(30,20,180,180,&memDC,1,1,S RCCOPY);CRect rc(30,20,210,200);CBrush brush(RGB(0,0,0));pDC->FrameRect(rc,&brush);rc.OffsetRect(220,0);BITMAP BitInfo;bmp.GetBitmap(&BitInfo);int x=BitInfo.bmWidth;int y=BitInfo.bmHeight;pDC->StretchBlt(rc.left,rc.top,rc.Width(),rc .Height(),&memDC,0,0,x,y,SRCCOPY);pDC->FrameRect(rc,&brush);brush.DeleteObject();memDC.DeleteDC();bmp.DeleteObject();}2.2程序3.运行程序出现IDB_BKBITMAP不存在4.成功运行程序左图使用了BitBlt方法,在区域中只显示部分图像;右图使用了SretchBlt方法,在区域中显示完整图像,图像被收缩了二、从磁盘中加载图像到窗口中1.穿建一个单文档/视图结构的应用程序2.在视图类中添加一个成员变量m_hBmp1.点击文件→选择新建→选择MFC APP ;填写工程名;点击确认→2.选择单文档→点击完成HANDLE m_hBmp3.在视图类的构造函数中调用LoadImage方法从磁盘中加载文件4.1在视图类中OnDraw方法中绘制位图,代码如下:CMy456View::CMy456View(){m_hBmp=LoadImage(NULL,"Demo.bmp",I MAGE_BITMAP,0,0,LR_LOADFROMFILE);} void CMy456View::OnDraw(CDC* pDC){CMy456Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);CBitmap bmp;bmp.Attach(m_hBmp);CDC memDC;memDC.CreateCompatibleDC(pDC);memDC.SelectObject(&bmp);BITMAP BitInfo;bmp.GetBitmap(&BitInfo);int x=BitInfo.bmWidth;int y=BitInfo.bmHeight;pDC->BitBlt(0,0,x,y,&memDC,0,0,SRCCOPY );bmp.Detach();memDC.DeleteDC();}4.2程序5运行程序三、显示JPEG图像1.创建单文档/视图结构的应用程序2.向视图类中添加成员变量1.点击文件→选择新建→选择MFC APP ;填写工程名;点击确认→2.选择单文档→点击完成HGLOBAL hMem;OLE_YSIZE_HIMETRIC m_JPGHeight; OLE_XSIZE_HIMETRIC m_JPGWidth; IPicture *m_pPicture;IStream *m_pStream;3.视图构造函数中从磁盘加载JPEG图像到流中CMy654View::CMy654View(){CFile file;file.Open("ddf.jpg",CFile::modeReadWrite); DWORD len=file.GetLength();hMem=GlobalAlloc(GMEM_MOVEABLE,len); LPVOID pData=NULL;pData=GlobalLock(hMem);file.ReadHuge(pData,len);file.Close();GlobalUnlock(hMem); CreateStreamOnHGlobal(hMem,TRUE,&m_pStr eam);OleLoadPicture(m_pStream,len,TRUE,IID_IPictu re,(LPVOID*)&m_pPicture);m_pPicture->get_Height(&m_JPGHeight);m_pPicture->get_Width(&m_JPGWidth);}4.在视图类OnDraw方法中绘制JPEG图像5.运行m_pPicture->Render(pDC->m_hDC,0,0,(int)(m_JPGWidth/26.45),(int)(m_JPGHeight/26.45),0,m_JPGHeight,m_JPGWidth,-m_JPGHeight,NULL);四、根据位图数据直接绘图/使用SretchDIBits根据数据流绘制图像1.创建单文档/视图结构的应用程序2.在视图类中定义一个缓冲区,用于存储数据流char *m_pBmpData;1.点击文件→选择新建→选择MFC APP ;填写工程名;点击确认→2.选择单文档→点击完成3.2程序3.1在视图类的构造函数中读取文件到数据流中CMy627View::CMy627View(){ CFile file;file.Open("bk.bmp",CFile::modeReadWrite);int len=file.GetLength();file.Seek(14,CFile::begin);m_pBmpData=new char[len-14];file.Read(m_pBmpData,len-14);file.Close();}4.1在视图类的析构函数中释放缓冲区 4.2程序CMy627View::~CMy627View(){delete m_pBmpData;}5.1向视图类中添加一个成员函数,根据数据5.2程序流输出图像void CMy627View::OutputStream(char*pStream){char *pHeader=pStream;BITMAPINFO BitInfo;memset(&BitInfo,0,sizeof(BITMAPINFO));memcpy(&BitInfo,pHeader,sizeof(BITMAPINFO));int x=BitInfo.bmiHeader.biWidth;int y=BitInfo.bmiHeader.biHeight;pHeader+=40;StretchDIBits(GetDC()->m_hDC,0,0,x,y,0,0,x,y,pHeader,&BitInfo,DIB_RGB_COLORS,SRCCOPY);}7.向程序中添加图像6.在视图类的OnDraw方法中调用OutputSteam方法绘制图像void CMy627View::OnDraw(CDC* pDC){CMy627Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);OutputStream(m_pBmpData);}8.成果运行程序。
VC++中图像处理类CBitmap的用法

VC++中图像处理类CBitmap的⽤法VC++中图像处理类CBitmap的⽤法class CBitmap : public CGdiObject{DECLARE_DYNAMIC(CBitmap)public:static CBitmap* PASCAL FromHandle(HBITMAP hBitmap);// ConstructorsCBitmap();BOOL LoadBitmap(LPCTSTR lpszResourceName);BOOL LoadBitmap(UINT nIDResource);BOOL LoadOEMBitmap(UINT nIDBitmap); // for OBM_/OCR_/OIC_#ifndef _AFX_NO_AFXCMN_SUPPORTBOOL LoadMappedBitmap(UINT nIDBitmap, UINT nFlags = 0,LPCOLORMAP lpColorMap = NULL, int nMapSize = 0);#endifBOOL CreateBitmap(int nWidth, int nHeight, UINT nPlanes, UINT nBitcount,const void* lpBits);BOOL CreateBitmapIndirect(LPBITMAP lpBitmap);BOOL CreateCompatibleBitmap(CDC* pDC, int nWidth, int nHeight);BOOL CreateDiscardableBitmap(CDC* pDC, int nWidth, int nHeight);// Attributesoperator HBITMAP() const;int GetBitmap(BITMAP* pBitMap);// OperationsDWORD SetBitmapBits(DWORD dwCount, const void* lpBits);DWORD GetBitmapBits(DWORD dwCount, LPVOID lpBits) const;CSize SetBitmapDimension(int nWidth, int nHeight);CSize GetBitmapDimension() const;// Implementationpublic:virtual ~CBitmap();#ifdef _DEBUGvirtual void Dump(CDumpContext& dc) const;#endif};⽗CGdiObjectclass CGdiObject : public CObject{DECLARE_DYNCREATE(CGdiObject)public:// AttributesHGDIOBJ m_hObject; // must be first data memberoperator HGDIOBJ() const;HGDIOBJ GetSafeHandle() const;static CGdiObject* PASCAL FromHandle(HGDIOBJ hObject);static void PASCAL DeleteTempMap();BOOL Attach(HGDIOBJ hObject);HGDIOBJ Detach();// ConstructorsCGdiObject(); // must Create a derived class objectBOOL DeleteObject();// Operations#pragma push_macro("GetObject")#undef GetObjectint _AFX_FUNCNAME(GetObject)(int nCount, LPVOID lpObject) const;int GetObject(int nCount, LPVOID lpObject) const;#pragma pop_macro("GetObject")UINT GetObjectType() const;BOOL CreateStockObject(int nIndex);BOOL UnrealizeObject();BOOL operator==(const CGdiObject& obj) const;BOOL operator!=(const CGdiObject& obj) const;// Implementationpublic:virtual ~CGdiObject();#ifdef _DEBUGvirtual void Dump(CDumpContext& dc) const;virtual void AssertValid() const;#endif};1 装载已导⼊⼯程的位图资源// 装载位图CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP);2 装载位图⽂件为了能让CBitmap能够装载位图⽂件,必须调⽤API函数LoadImage HANDLE LoadImage(HINSTANCE hinst, // handle of the instance containing the imageLPCTSTR lpszName, // name or identifier of imageUINT uType, // type of imageint cxDesired, // desired widthint cyDesired, // desired heightUINT fuLoad // load flags);装载: Example 1:HBITMAP hBmp = (HBITMAP)LoadImage(NULL,m_fileName,IMAGE_BITMAP,0, 0,LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_DEFAULTSIZE); Example 2:HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),"BG.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);将装载后得到的HBITMAP资源句柄与 CBitmap 对象相连if (hBmp != NULL) {CBitmap *pBmp = CBitmap::FromHandle(hBmp);}或CBitmap bmp;if (hBmp != NULL) {bmp.DeleteObject();bmp.Attach(hBmp);}3 显⽰位图CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP1);BITMAP bm;bmp.GetBitmap(&bm);CDC dc;dc.CreateCompatibleDC(pDC);CBitmap*pOldBmp=(CBitmap *)dc.SelectObject(&bmp);pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dc,0,0,SRCCOPY);pDC->SelectObject(pOldBmp);bmp.DeleteObject();bmp.LoadBitmap(IDB_BITMAP2);4 删除资源CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP);CBitmap *pOld=pDC->SelectObject(&bmp);// 此时位图对象还在pDC中,因此不能马上删除// ⽽是先将位图从DC中选出然后再删除pDC->SelectObject(pOld);bmp.DeleteObject();5 CBitmap 析构当CBitmap作为局部变量在其退出作⽤范围后,会发⽣析构,这时候CBitmap会将其对应的位图资源(hBitmap )释放掉。
VC6.0中控件及按钮的设置和使用资料

VC6.0中控件及按钮的设置和使用VC学习笔记1:按钮的使能与禁止用ClassWizard的Member Variables为按钮定义变量,如:m_Button1;则m_Button1.EnableWindow(true); 使按钮处于允许状态m_Button1.EnableWindow(false); 使按钮被禁止,并变灰显示VC学习笔记2:控件的隐藏与显示用CWnd类的函数BOOL ShowWindow(int nCmdShow)可以隐藏或显示一个控件。
例1:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_HIDE ); //隐藏控件例2:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_SHOW ); //显示控件以上方法常用于动态生成控件,虽说用控件的Create函数可以动态生成控件,但这种控件很不好控制,所以用隐藏、显示方法不失为一种替代手段。
VC学习笔记3:改变控件的大小和位置用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置。
void MoveWindow(int x,int y,int nWidth,int nHeight);void MoveWindow(LPCRECT lpRect);第一种用法需给出控件新的坐标和宽度、高度;第二种用法给出存放位置的CRect对象;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号pWnd->MoveWindow( CRect(0,0,100,100) ); //在窗口左上角显示一个宽100、高100的编辑控件SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);第一个参数我不会用,一般设为NULL;x、y控件位置;cx、cy控件宽度和高度;nFlags常用取值:SWP_NOZORDER:忽略第一个参数;SWP_NOMOVE:忽略x、y,维持位置不变;SWP_NOSIZE:忽略cx、cy,维持大小不变;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_BUTTON1 ); //获取控件指针,IDC_BUTTON1为控件ID号pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE ); //把按钮移到窗口的(5 0,80)处pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE ); //把编辑控件的大小设为(100,80),位置不变pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ); //编辑控件的大小和位置都改变以上方法也适用于各种窗口。
vc中常用控件的创建于使用

VC中Windows常用控件的创建和使用引言本文将要介绍的Windows控件指的是Windows系统预定义的标准控件,如按钮控件、编辑控件和列表控件等。
这些预定义控件实际是一种特殊的子窗口,主要供用户同应用程序的交互之用。
和普通窗口类一样,每一个预定义控件也都是由所属的窗口类规定了自身的外观属性和具有的功能。
Windows系统通过预定义的方式提供了一些标准控件的窗口类名,在程序设计时只需通过调用CreateWindow()函数或CreateWindowEx()函数并将预定义的窗口类名作为参数传入即可创建出相应的控件。
当用户通过屏幕对象同控件进行交互操作时,控件将以"通知消息"的形式向父窗口发送WM_COMMAND通知消息,消息的wParam参数含有控制标识,在lPamam参数的高位字和低位字中分别含有通知码和控制句柄,由父窗口完成对消息的响应处理。
按钮类控件按钮类控件是窗口类名被系统预定义为BUTTON的一类控件,该类控件具有十余种不同的窗口风格,包含了普通的下压式按钮、单选按钮、复选按钮和分组框等多种常用的按钮形式。
具体情况列表如下:以上按钮风格通常需要同窗口风格共同使用,由CreateWindow()函数或MFC的CButton类成员函数Create()完成对按钮的创建:如果需要处理按钮发送给其父窗口的消息,可以在进行消息响应的类实现中添加一个如下形式的消息映射入口和相应的消息处理函数:ON_Notification(id, memberFxn )其中,id为发送通知消息的按钮ID号,memberFxn为消息处理函数。
如果按钮是以new操作符的方式在堆(heap)内创建一个CButton对象,那么就必须确保在关闭窗口前能调用delete销毁该对象。
如果CButton对象是在栈上创建的就不必显式销毁对象了,应用程序在退出时会自动予以销毁。
编辑类控件以窗口类名"EDIT"创建的编辑类控件是一个可以用来接受用户键盘字符输入的矩形区域,可以在其内进行编辑操作。
vc tab控件的用法

vc tab控件的用法
VC中的Tab控件是一种用于创建多页面的用户界面(UI)的工具。
它可以让用户在不同的页面之间切换,以便更好地管理和显示不同的内容。
要使用VC中的Tab控件,您需要执行以下步骤:
1. 在您的VC项目中添加Tab控件。
您可以在Visual Studio的设计视图中直接从工具箱中拖动Tab控件到您的UI中,或者您也可以手动编写代码来创建Tab 控件。
2. 配置Tab控件的属性。
您可以通过属性窗口来设置Tab控件的属性,例如Tab 页的样式、位置、大小等。
3. 添加Tab页。
您可以使用Tab控件的“Pages”属性来添加Tab页。
每个Tab 页都是一个单独的窗口,可以包含您想要显示的内容。
4. 在每个Tab页中添加控件。
您可以在每个T ab页中添加其他控件,例如按钮、文本框、标签等,以便用户可以与页面进行交互。
5. 编写事件处理程序。
您需要编写事件处理程序来处理用户与Tab控件的交互,例如当用户单击一个Tab页时,您可能需要显示不同的内容。
总之,VC中的Tab控件是一种非常有用的工具,可以让您创建复杂的UI,并在不同的页面中显示不同的内容。
如果您想要在您的应用程序中使用Tab控件,请参考VC的文档或教程以获取更多信息。
1。
VC编程中如何操作数据库中的图像字段C语言教程.

VC编程中如何操作数据库中的图像字段C语言教程本文以ACESS97为例,采用ODBC方式打开数据库Photo,数据库Photo的images表中含有一个image的图像字段,在刚打开时显示第一条记录。
存取操作时关键是确定数据的长度,读数据操作时图像数据可以从记录集的图像字段对应的长二进制成员变量m_Image的成员m_hData得到,这个句柄变量存放分配给图像字段的数据,该对象的另一个成员变量m_dwDataLength为该字段的实际长度,在某些情况下,m_dwDataLength的值有可能小于m_hData 中的数据长度值。
具体内容可以参考MSND。
以下实现的部分关键代码。
首先请看 CdbImages记录集的定义:CdbImages::CdbImages(CDatabase* pdb): CRecordset(pdb){//{{AFX_FIELD_INIT(CdbImages)m_nFields = 2;//数据库中有两个字段//}}AFX_FIELD_INITm_nDefaultType = snapshot;//数据库以快照形式打开}CString CdbImages::GetDefaultConnect(){return_T("ODBC;DSN=MS Access Database");//以ODBC操作数据库}CString CdbImages::GetDefaultSQL(){return _T("[Images]");//默认的操作是连接到数据库中的Images表} void CdbImages::DoFieldExchange(CFieldExchange* pFX){//{{AFX_FIELD_MAP(CdbImages)pFX-SetFieldType(CFieldExchange::outputColumn);RFX_LongBinary(pFX,_T("[Image]"), m_Image);//记录集中的成员对象和表中的OLE字段采用长二进制交换。
VC6.0中画图用的chart控件

//设置背景颜色 m_Chart.GetBackdrop().GetFill().SetStyle(1); m_Chart.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(255, 255, 255);
//设置数据系列的颜色:如果是曲线图则对应每条曲线的颜色 for (int i = 1; i <= m_Chart.GetColumnCount(); i++ ) {//这里设置为随机颜色 m_Chart.GetPlot().GetSeriesCollection().GetItem(i).GetPen().GetVtColor().Set(rand() * 230 / RAND_MAX, rand() * 230 / RAND_MAX, rand() * 230 / RAND_MAX); m_Chart.GetPlot().GetSeriesCollection().GetItem(i).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1); } //设置 x 轴的其他属性 m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetAuto(FALSE); // 不自动标注 X 轴刻度 m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerLabel(1);// 每刻度一个标注 m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerTick(1); // 每刻度一个刻度线