电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

vc编程技巧总结

来源:开心麻花作者:开心麻花2025-09-191

vc编程技巧总结(精选8篇)

vc编程技巧总结 第1篇

1.等于号=表示赋值操作;= =表示逻辑操作。在使用if或(a= =b)时候需要注意。2.浮点型数据判断相等使用fabs(a-b)<0.00001f 3.数组使用SetSize(nSize)之前需要清空RemoveAll()4.修改资源编译后exe不执行处理方法:选中资源,将其Property属性对话框中,修改其File Name属性,改名,保存后会生成其他文件名

5.对于绘制文字TextOut(),在SetMapMode(MM_LOMETRIC)后,需要重新选择字体,否则打印预览时候会出现字体乱码现象。

6.赋值型条件语句需要加括号,否则先执行运算符,再执行条件语句,如int a=b+c>0 ? 1 :-1,时,将先执行(b+c)。

MFC的消息处理函数

1.AfxWndProc()该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc

2.AfxCallWndProc()该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数

3.WindowProc()该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数

4.OnWndMsg()该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数

5.OnCommand()该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()就会调用OnCmdMsg()函数

6.OnCmdMsg()根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。例如:如果拥有该窗口的类是一个框架类,则命令和通知消息也被传递到视图和文档类,并为该类寻找一个消息处理函数

MFC应用程序创建窗口的过程

1.PreCreateWindow()该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等)

2.PreSubclassWindow()这也是一个重载函数,允许首先子分类一个窗口

3.OnGetMinMaxInfo()该函数为消息响应函数,响应的是WM_GETMINMAXINFO消息,允许设置窗口的最大或者最小尺寸

4.OnNcCreate()该函数也是一个消息响应函数,响应WM_NCCREATE消息,发送消息以告诉窗口的客户区即将被创建

5.OnNcCalcSize()该函数也是消息响应函数,响应WM_NCCALCSIZE消息,作用是允许改变窗口客户区大小

6.OnCreate()该函数也是一个消息响应函数,响应WM_CREATE消息,发送消息告诉一个窗口已经被创建

7.OnSize()该函数也是一个消息响应函数,响应WM_SIZE消息,发送该消息以告诉该窗口大小已经发生变化

8.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息说明窗口在移动

9.OnChildNotify()该函数为重载函数,作为部分消息映射被调用,告诉父窗口即将被告知一个窗口刚刚被创建

MFC应用程序关闭窗口的顺序(非模态窗口)

1.OnClose()消息响应函数,响应窗口的WM_CLOSE消息,当关闭按钮被单击的时候发送此消息

2.OnDestroy()消息响应函数,响应窗口的WM_DESTROY消息,当一个窗口将被销毁时,发送此消息

3.OnNcDestroy()消息响应函数,响应窗口的WM_NCDESTROY消息,当一个窗口被销毁后发送此消息

4.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作,被CWnd调用

MFC应用程序中打开模式对话框的函数调用顺序

1.DoModal()重载函数,重载DoModal()成员函数 2.PreSubclassWindow()重载函数,允许首先子分类一个窗口

3.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建

4.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化

5.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息,以告诉窗口正在移动

6.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息,以允许改变对话框中控件的字体

7.OnInitDialog()消息响应函数,响应WM_INITDIALOG消息,发送此消息以允许初始化对话框中的控件,或者是创建新控件

8.OnShowWindow()消息响应函数,响应WM_SHOWWINDOW消息,该函数被ShowWindow()函数调用

9.OnCtlColor()消息响应函数,响应WM_CTLCOLOR消息,被父窗口发送已改变对话框或对话框上面控件的颜色

10.OnChildNotify()重载函数,作为WM_CTLCOLOR消息的结果发送

MFC应用程序中关闭模式对话框的顺序

1.OnClose()消息响应函数,响应WM_CLOSE消息,当“关闭”按钮被单击的时候,该函数被调用

2.OnKillFocus()消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送

3.OnDestroy()消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送

4.OnNcDestroy()消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送

5.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用

打开无模式对话框的顺序

1.PreSubclassWindow()重载函数,允许用户首先子分类一个窗口 2.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建

3.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化

4.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息以告诉窗口正在移动

5.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息以允许改变对话框中控件的字体

以上这些的执行都是按给定的顺序执行!

只有清楚的了解应用程序的执行顺序,才能在编写代码的时候知道,在什么时候应该执行什么,以及在什么地方该处理什么!

这只是本人总结的一点小小的经验,希望能对MFC的初学者有所帮助!MFC应用程序中处理消息的顺序

1.AfxWndProc()该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc

2.AfxCallWndProc()该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数

3.WindowProc()该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数

4.OnWndMsg()该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数

5.OnCommand()该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()就会调用OnCmdMsg()函数

6.OnCmdMsg()根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。例如:如果拥有该窗口的类是一个框架类,则命令和通知消息也被传递到视图和文档类,并为该类寻找一个消息处理函数

MFC应用程序创建窗口的过程

1.PreCreateWindow()该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等)

2.PreSubclassWindow()这也是一个重载函数,允许首先子分类一个窗口

3.OnGetMinMaxInfo()该函数为消息响应函数,响应的是WM_GETMINMAXINFO消息,允许设置窗口的最大或者最小尺寸

4.OnNcCreate()该函数也是一个消息响应函数,响应WM_NCCREATE消息,发送消息以告诉窗口的客户区即将被创建

5.OnNcCalcSize()该函数也是消息响应函数,响应WM_NCCALCSIZE消息,作用是允许改变窗口客户区大小

6.OnCreate()该函数也是一个消息响应函数,响应WM_CREATE消息,发送消息告诉一个窗口已经被创建

7.OnSize()该函数也是一个消息响应函数,响应WM_SIZE消息,发送该消息以告诉该窗口大小已经发生变化

8.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息说明窗口在移动

9.OnChildNotify()该函数为重载函数,作为部分消息映射被调用,告诉父窗口即将被告知一个窗口刚刚被创建

MFC应用程序关闭窗口的顺序(非模态窗口)

1.OnClose()消息响应函数,响应窗口的WM_CLOSE消息,当关闭按钮被单击的时候发送此消息

2.OnDestroy()消息响应函数,响应窗口的WM_DESTROY消息,当一个窗口将被销毁时,发送此消息

3.OnNcDestroy()消息响应函数,响应窗口的WM_NCDESTROY消息,当一个窗口被销毁后发送此消息

4.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作,被CWnd调用

MFC应用程序中打开模式对话框的函数调用顺序

1.DoModal()重载函数,重载DoModal()成员函数 2.PreSubclassWindow()重载函数,允许首先子分类一个窗口

3.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建

4.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化

5.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息,以告诉窗口正在移动

6.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息,以允许改变对话框中控件的字体

7.OnInitDialog()消息响应函数,响应WM_INITDIALOG消息,发送此消息以允许初始化对话框中的控件,或者是创建新控件

8.OnShowWindow()消息响应函数,响应WM_SHOWWINDOW消息,该函数被ShowWindow()函数调用

9.OnCtlColor()消息响应函数,响应WM_CTLCOLOR消息,被父窗口发送已改变对话框或对话框上面控件的颜色

10.OnChildNotify()重载函数,作为WM_CTLCOLOR消息的结果发送

MFC应用程序中关闭模式对话框的顺序

1.OnClose()消息响应函数,响应WM_CLOSE消息,当“关闭”按钮被单击的时候,该函数被调用

2.OnKillFocus()消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送 3.OnDestroy()消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送

4.OnNcDestroy()消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送

5.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用

打开无模式对话框的顺序

1.PreSubclassWindow()重载函数,允许用户首先子分类一个窗口

2.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建

3.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化

4.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息以告诉窗口正在移动

5.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息以允许改变对话框中控件的字体

MFC的一些主要成员函数

CWinThread::m_pMainWnd:保存指向应用程序的主窗口指针。CWinThread::GetMainWnd:查询指向线程主窗口的指针。CWinThread::InitInstance:重载以实现线程实例的初始化。AfxGetApp:获得指向CWinApp对象的指针。

AfxGetInstanceHandle:获得当前应用程序实例的句柄。AfxGetResourceHandle:获得应用程序资源的句柄。

AfxGetAppName:获得一个字符串指针,其中包含了应用程序的名字。另外,如果你拥有一个指向CWinApp对象的指针,可以通过m_pszExename来获得应用程序的名字。

CDocument::IsModified:标识文档从最近一次保存以来是否被修改过。CDocument::UpdateAllViews:通知所有视图文档已被修改的消息。CWnd::m_hWnd:指明与这个CWnd对象相关联的HWND句柄。CWnd::Create:创建并初始化与CWnd对象相关联的子窗口。

CWnd::PreCreateWindow:在与CWnd对象相关联的窗口被创建之前调用。CWnd::IsWindowEnabled:确定一个窗口是否允许鼠标和键盘输入。CWnd::EnableWindow:允许或禁止鼠标和键盘输入。CWnd::SetWindowPos:改变子窗口、弹出窗口和顶层窗口的大小、位置以及顺序。CWnd::GetDlgItem:获得指定的对话框中具有指定ID的控件。CWnd::UpdateData:初始化对话框或获得对话框中的数据。CWnd::GetWindowRect:获得CWnd的屏幕坐标。CWnd::GetDC:获得客户区的设备环境。

CWnd::RedrawWindow:更新客户区中的指定矩形或区域。CWnd::UpdateWindow:更新客户区。

CWnd::Invalidate:使整个客户区无效。CWnd::ShowWindow:显示或隐藏窗口。

CWnd::ClientToScreen:将给定点或显示器上矩形的客户区坐标转换为屏幕坐标。

CWnd::ScreenToClient:将给定点或显示器上矩形的屏幕坐标转换为客户坐标。CWnd::SetWindowText:将窗口的文本或标题文字(如果有)设为指定的文本。CWnd::SetFont:设置当前字体。

CWnd::GetDlgItemInt:将给定对话框中控件的文本转换为整数。

CWnd::SetTimer:安装一个系统定时器,当它被激活时,发送一个WM_TIMER消息。

CWnd::KillTimer:销毁一个系统定时器。CWnd::FlashWindow:使窗口闪烁一次。CWnd::MessageBox:创建并显示一个窗口,其中包含了应用程序提供的消息和标题

vc编程技巧总结 第2篇

VC图像编程教案 第五章

5.对话框及控制的应用 5.1 先以日历控件说明控件编程的重要性 5.2 说明编写控件所需要的知识: 控件的动态生成-全局变量(类的成员变量) 自定义消息的定义与响应; (见我空间里的文章“这篇技术的文章不错”等) 5.3 一个实现加法功能的对话框程序,由此函数说明两点: 控件关联变量和关联值的区别 UpdateData函数的`用法 5.4 将刚才的程序转化的控件程序,体会控件编程的思路 GetDlgItem的用法 5.5 如何在其他程序中使用对话框

基于VC编程的数字图像几何变换 第3篇

摄影测量与遥感所获取数字影像, 尤其是近景摄影测量采用非量测相机获取的影像, 不能直接应用于测量, 首先需要经过图像处理, 形成满足测量要求的图像。

图像几何变换是图像处理的基础。经过几何变换, 使图像易于处理, 有利于特征提取和对图像信息的理解。

1 原理介绍

1.1 图像平移

平移是指将图像中所有的点都按照指定的平移量水平、垂直移动。设 (x0, y0) 为原图像上的一点, 图像水平平移量tx, 垂直平移量为ty, 则平移后点 (x0, y0) 的坐标变为 (x1, y1) 。

(x0, y0) 与 (x1, y1) 之间的关系为:x1=x0+tx;y1=y0+ty。

平移后图像上的一点是由原图像上某点经过平移得到的, 因此平移后图像中每个像素的颜色是由原图像中对应像素颜色确定的。如新图中的 (0, 0) 点的颜色和其在原图中的对应点 (-tx, -ty) 处的一样。

1.2 图像旋转

图像旋转通常是以图像的中心为圆心, 按顺时针方向旋转。

设旋转前一点坐标 (x0, y0) , 旋转a角度后对应点坐标 (x1, y1) , 则以矩阵的形式表示:

1.3 图像缩放

假设放大因子为ratio, 缩放的变换矩阵为:

由于放大图象时产生了新的象素, 缩小时合并了像素, 变换后图像上点与原图点不存在一一对应的关系, 所以采用的做法是找与之最临近的点。

2 算法设计

2.1 图像平移

图像几何变换都是基于像素处理的。

首先打开原始图像, 获取图像信息。

第二步设置水平平移量和垂直平移量。根据平移量和原图像高度宽度, 计算平移后图像的宽度和高度:

NWidth=l Width+ (long) f XMove;NHeight=l Height+ (long) f YMove。

第三步采用行列循环方式, 计算新图像中每个像素对应于原图像的像素, 将原图像的像素灰度值或RGB颜色值赋值给新图像的像素。对于原图像中没有的对应点的像素, 将其灰度值设为0 (白色) 。以8位图为例, 程序如下:

2.2 图像旋转

首先打开原始图像, 获取图像信息, 包括图像的高度、宽度、调色板或者RGB值等信息。

第二步因为图像旋转采用以图像中心为原点的坐标系, 因此首先进行坐标转换, 计算原图四角点在以图像中心为原点的旋转坐标系中的坐标, 并根据旋转角度计算旋转后图像四角坐标, 利用旋转后图像四角点计算新图像高和宽。

第三步采用行列循环方式, 计算新图像中每个像素对应于原图像的像素, 将原图像的像素灰度值或RGB颜色值赋值给新图像的像素。对于原图像中没有的对应点的像素, 将其灰度值设为0 (白色) 。

2.3 图像缩放

首先打开原始图像, 获取图像信息, 包括图像的高度、宽度、调色板或者RGB值等信息。

第二步设置缩放参数, 并根据原图像宽、高计算经过缩放后的图像的宽、高。

第三步采用行列循环方式, 计算新图像中每个像素对应于原图像的像素, 将原图像的像素灰度值或RGB颜色值赋值给新图像的像素。对于原图像中没有的对应点的像素, 将其灰度值设为0 (白色) 。算法与平移和旋转类似, 在此不在详述。

3 实现方法与过程

(1) 创建一个MFC多文档工程, 并设置滚动视图模式。

(2) 在Doc类中声明一个HDIB类型的的成员变量m_h DIB, 并利用Class Wind类向导为Doc类添加On Open Document和On SaveDocument两个函数, 添加代码, 调用DIB.dll中封装好的open和save函数, 在On Draw函数中调用Draw (p DC, p Doc->m_h DIB) , 实现图像读取和保存功能。

(3) 添加菜单“平移”“旋转”“缩放”, 并为菜单添加相应的对话框资源, 用以设置相关参数。利用Class Wind类向导为各个菜单添加消息处理函数, 为每个对话框添加对话框类。

(4) 在对话框类中添加相应参数变量并初始化。为每个菜单消息处理函数编写函数体, 使之实现相应功能。

摘要:数字图像处理是摄影测量的基础, 图像几何变换是图像处理最基本的内容。文章就利用VC编程实现图像的平移、旋转、缩放的原理、算法和实现过程进行详细论述。

关键词:VC,数字图像,平移,旋转,缩放

参考文献

[1]孙家柄.遥感原理与应用[M].武汉:武汉大学出版社, 2006.

[2]王育坚.Visual C++面向对象编程教程[M].北京:清华大学出版, 2006.

[3]贾永红.数字图像处理[M].武汉:武汉大学出版社, 2004.

vc编程技巧总结 第4篇

关键词 嵌入式SQL 预编译程序 动态连接库

中图分类号:TP312 文献标识码:A

0 引言

在通常的运用中,SQL语言是作为独立语言在终端交互方式下使用的,是非过程性的,其大多数语句都是独立执行,与上下文无关,称作自含式语言;而许多事务处理应用都是过程性的,需要根据不同的条件来执行不同的任务,如果把SQL语言嵌入到诸如C语言这样的过程化的编程语言中,程序开发人员就能设计出更加灵活的应用系统,具有SQL语言和高级编程语言的良好特征,它将比单独使用SQL或C语言具有更强的功能和灵活性,这种方式下使用的SQL语言称为嵌入式SQL语言。

在计算机专业课程《数据库系统概论》中有关于嵌入式SQL语言的内容,其教学手段一般都是理论讲述,教学效果不是十分理想。下面介绍一种在现有条件下都能办到的嵌入式SQL语言实现方法。

1 在VC中使用嵌入式SQL语言访问Microsoft SQL Server 2000

1.1 使用嵌入式SQL语言所采用的系统配置

①操作系统:Windows 2000 Professional

②Microsoft Visual C++ 6.0

③Microsoft SQL Server 2000

在安装Microsoft SQL Server 2000 时要注意选择安装Development Tools,为使用嵌入式SQL语言准备必要的头文件和库文件。

1.2 编辑嵌入式SQL程序

使用文本编辑器如记事本编辑嵌入式SQL程序,其存盘文件的扩展名为"sqc"。在嵌入式SQL程序中嵌入的SQL语句以EXEC SQL作为起始标识,语句的结束以";"作为标识。在嵌入的SQL语句中可以使用C语言的程序变量(即主变量),这时主变量名前加冒号(:)作为标志,以区别于字段名。主变量的声明必须包含在"EXEC SQL BEGIN DECLARE SECTION; "和"EXEC SQL END DECLARE SECTION; "之间。以下是一个嵌入式SQL程序demo.sqc:

#include

void main()

{

EXEC SQL BEGIN DECLARE SECTION;

char first_name[50];

char last_name[] = "White";

EXEC SQL END DECLARE SECTION;

EXEC SQL CONNECT TO my_server.pubs

USER my_login.my_password;

EXEC SQL SELECT au_fname INTO :first_name

FROM authors WHERE au_lname = :last_name;

EXEC SQL DISCONNECT ALL;

printf("first_name: %s\n", first_name);

}

此C语言程序中嵌入了SQL语句,用来访问数据库服务器my_server中的数据库pubs,登录名my_login,口令my_password,在表authors中检索姓"White"的作者的名,并存入主变量first_name,然后通过printf函数输出结果。

1.3 预编译嵌入式SQL程序

Microsoft SQL Server 2000提供的预编译程序nsqlprep.exe,用于对嵌入式SQL程序进行预编译处理,生成C语言源程序。实际上就是将嵌入式SQL程序中的嵌入式SQL语句替换为对运行时库文件Sqlakw32.dll的函数调用,接着运行时库文件调用动态连接库Ntwdblib.dll通过网络来存取Microsoft SQL Server 2000数据库服务器。

预编译程序nsqlprep的常用语法为:

nsqlprep ESQL_File /SQLACCESS /DB server_name.database_name /PASS login.password

其中ESQL_File是要预编译的嵌入式SQL程序;/SQLACCESS通知nsqlprep 自动地为嵌入式SQL程序中的静态SQL语句创建相应的存储过程;/DB server_name.database_name指明要连接的服务器以及数据库名称;/PASS login.password给出登录名及相应的口令。对于demo.sqc的预编译命令为:

nsqlprep demo /SQLACCESS /DB my_server.pubs /PASS my_login.my_password

经预编译处理后即可产生C语言源程序demo.c

1.4 配置VC++ 6.0 中的Project Settings

为了编译、连接nsqlprep生成的C语言源程序,需要增加必要的访问路径到VC++ 6.0 的环境设置中:

①选择菜单Tools中的菜单项Options

②选择Directories标签页

③在"Show directories for"下拉框中选择"Include files",增加Microsoft SQL Server 2000 开发所需头文件的路径:C:\Program Files\Microsoft SQL Server\80\Tools\DevTools\Include

④在"Show directories for"下拉框中选择"Library files",增加Microsoft SQL Server 2000 开发所需库文件的路径:C:\Program Files\Microsoft SQL Server\80\Tools\DevTools\LIB

1.5 生成访问Microsoft SQL Server 2000数据库的可执行程序

在VC++ 6.0 中创建一个"WIN32 Console Application"类型的Project,选择菜单Project中菜单项Add to Project的子项Files,将第三步中生成的C语言源程序demo.c添加到此Project中,然后编译、连接即可生成访问Microsoft SQL Server 2000数据库的可执行程序:demo.exe,运行的输出结果为:Johnson;这与使用交互式查询工具Query Analyzer检索的结果是一致的。至此,一个在VC++ 6.0中使用嵌入式SQL语言访问Microsoft SQL Server 2000数据库的应用已经开发完成。

2 结束语

本文探讨了Microsoft SQL Server 2000中的ESQL/C编程,并介绍了在常用编程软件VC++ 6.0 中嵌入式SQL程序设计的实现方法。在嵌入式SQL语言的课堂教学中,使用该方法,获得了良好的教学效果。

VC图像编程教案 第三章 第5篇

VC图像编程教案 第三章

VC图像编程教案 第三章 3 DIB类的高级应用。 3.1 BMP文件结构 BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。 typedef struct tagBITMAPFILEHEADER { WORDbfType; // 位图文件的类型,必须为BM DWORD bfSize; // 位图文件的大小,以字节为单位 WORDbfReserved1;  // 位图文件保留字,必须为0 WORDbfReserved2;  // 位图文件保留字,必须为0 DWORD bfOffBits; // 位图数据的起始位置,以相对于位图 // 文件头的.偏移量表示,以字节为单位 } BITMAPFILEHEADER; BMP位图信息头数据用于说明位图的尺寸等信息。 typedef struct tagBITMAPINFOHEADER{ DWORD  biSize; // 本结构所占用字节数 LONGbiWidth;  // 位图的宽度,以像素为单位 LONGbiHeight; // 位图的高度,以像素为单位 WORD biPlanes; // 目标设备的级别,必须为1 WORD biBitCount// 每个像素所需的位数,必须是1(双色),   // 4(16色),8(256色)或24(真彩色)之一 DWORD  biCompression; // 位图压缩类型,必须是 0(不压缩),   // 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一 DWORD  biSizeImage; // 位图的大小,以字节为单位 LONGbiXPelsPerMeter; // 位图水平分辨率,每米像素数 LONGbiYPelsPerMeter;  // 位图垂直分辨率,每米像素数 DWORD  biClrUsed;// 位图实际使用的颜色表中的颜色数 DWORD  biClrImportant;// 位图显示过程中重要的颜色数 } BITMAPINFOHEADER; typedef struct tagRGBQUAD { BYTErgbBlue;// 蓝色的亮度(值范围为0-255) BYTErgbGreen; // 绿色的亮度(值范围为0-255) BYTErgbRed; // 红色的亮度(值范围为0-255) BYTErgbReserved;// 保留,必须为0 } RGBQUAD; 颜色表中RGBQUAD结构数据的个数有biBitCount来确定: 当biBitCount=1,4,8时,分别有2,16,256个表项; 当biBitCount=24时,没有颜色表项。 位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下: typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; // 位图信息头 RGBQUAD  bmiColors[1];  // 颜色表 } BITMAPINFO; 3.2 DIB类的Read函数: BOOL CDib::Read(CFile* pFile) {  // 1. read file header to get size of info hdr + color table  // 2. read info hdr (to get image size) and color table  // 3. read image  // cant use bfSize in file header  Empty;  int nCount, nSize;  BITMAPFILEHEADER bmfh;  try { nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER)); if(nCount != sizeof(BITMAPFILEHEADER)) {  throw new CException; } if(bmfh.bfType != 0x4d42) {  throw new CException; } nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER); m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize]; m_nBmihAlloc = m_nImageAlloc = crtAlloc; nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table ComputeMetrics(); ComputePaletteSize(m_lpBMIH->biBitCount); MakePalette(); m_lpImage = (LPBYTE) new char[m_dwSizeImage]; nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only  }  catch(CException* pe) { AfxMessageBox(Read error); pe->Delete(); return FALSE;  }  return TRUE; } 3.3 DIB类的Write函数: BOOL CDib::Write(CFile* pFile) {  BITMAPFILEHEADER bmfh;  bmfh.bfType = 0x4d42;  // BM  int nSizeHdr = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;  bmfh.bfSize = 0; // bmfh.bfSize = sizeof(BITMAPFILEHEADER) + nSizeHdr + m_dwSizeImage;  // meaning of bfSize open to interpretation (bytes, words, dwords?) -- we wont use it  bmfh.bfReserved1 = bmfh.bfReserved2 = 0;  bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +  sizeof(RGBQUAD) * m_nColorTableEntries;   try { pFile->Write((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER)); pFile->Write((LPVOID) m_lpBMIH,  nSizeHdr); pFile->Write((LPVOID) m_lpImage, m_dwSizeImage);  }  catch(CException* pe) { pe->Delete(); AfxMessageBox(write error); return FALSE;  }  return TRUE; } 3.4 明确图像文件 CFile CDib类三者之间的关系 3.5 尝试直接用CDib类的m_lpImage成员读取图像数据。 3.6 尝试通过Write保存图像到另一个位置 3.7 尝试通过Write重写原图像文件(注意保存)

VC图像编程教案 第二章 第6篇

VC图像编程教案 第二章

第二章 常用算子练习实验图片: 第二章 TITLE=VC图像编程教案 2.1 边缘检测算子 2.1.1 算子卷积的原理-----相当于高通滤波器 2.1.2 应用算子时边界的处理方法 2.1.3 算子模板 Roberts: 第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案 Sobel: 第二章 TITLE=VC图像编程教案取两结果中的大值为变换结果 Priwitt: 第二章 TITLE=VC图像编程教案 Krisch: 第二章 TITLE=VC图像编程教案第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案第二章 TITLE=VC图像编程教案 2.2 小波算子 2.2.1 小波算子原理,高低通算子参数关系为: 第二章 TITLE=VC图像编程教案 2.2.2 Daubechies_6(DB6)算子: 第二章 TITLE=VC图像编程教案 Daubechies_8(DB8)算子: 第二章 TITLE=VC图像编程教案 2.3 SUSAN角点检测方法(作业) SUSAN算子使用的是圆形模板来进行角点探测,圆形模板有等方向性的特点。一般使用模板的半径为3~4个像元。如图 第二章 TITLE=VC图像编程教案 模板置于每一个像素,将模板的每一个像像素与中心像素进行比较。 第二章 TITLE=VC图像编程教案 其中I(r)表示r点像素的灰度值,r0表示模板中心像素。t表示一个限制阈值,这个值决定了所能检测角点的最小对比度,也是能忽略的噪声的最大容限。它主要决定了能够提取 的特征数量越小,可从对比度越低的图像中提取特征,而且提取的特征也越多。因此对于不同对比度和噪声情况的图像应取不同的t值。 现在一些研究已经可以把这个t值改进为自适应值。也就是说可以根据图像的具体所含噪声确定最好的`t值。 第二章 TITLE=VC图像编程教案 由函数n计算出所谓的USAN区域面积值。C(r0)表示以r0为中心的圆邻域。然后由一个个局部非极大值抑制模板来确定最终角点。具体可由下式表述: 第二章 TITLE=VC图像编程教案 式中g为非极大值抑制门限。门限g决定了输出角点的USAN区域的最大值。g的大小不但决定了可从图像中提取角点的多寡,它还决定了所检测到的角点的尖锐程度。所以一旦确定了所需角点的质量(尖锐程度),g就可以取一个固定不变的值。一般情况下取1/2模板像素个数,例如77模板的g=37/2。 实验图片为: 第二章 TITLE=VC图像编程教案 预计检测结果:好于 第二章 TITLE=VC图像编程教案 (本课用时约1小时30分)

浅析VC与Matlab联合编程 第7篇

作者:邓科

在“浅析VC与Matlab联合编程<一>”和“浅析VC与Matlab联合编程<二>”中介绍了matcom,这个工具可以将用matlab写的m文件翻译成C++文件,或者是可执行文件(exe)或库文件(dll),

浅析VC与Matlab联合编程

。但是matcom在很多方面也有限制,比如,对struct等类的支持有缺陷,部分绘图语句无法实现或得不到准确图象,尤其是三维图象。

实际上VC与matlab的接口实现方法有很多种,matcom只是其中一种,本文再介绍一种比较容易实现的方法:COM接口方法。COM(Compponent Object Model组件对象模型)是一项比较复杂的技术,详细讲的话几本书也讲不完,所以在这里不作介绍,本文通过一个例子详细介绍如何在matlab下做COM组件,以及如何在VC中调用COM组件。

首先在Matlab编辑器里编辑m函数文件:启动matlab->File->New->M-file函数内容如图1:该函数无输入输出参数,文件保存为huatu.m。

图1 m函数huatu.m

在matlab下建立COM组件,步骤如下:

1、在matlab command window 输入如下命令:

>>comtool

出现com编辑界面,如图2:

图2 com组件编辑界面

2、新建工程:File->New Project,如图3。

图2 com组件属性设置

3、设置组件属性,在”Component name“项中填写组件名称”component“,这时候会自动生成类”component“,在”Class name“项中填写类名称”huatu“,如图4,

图4 com组件属性设置1

为了便于区分,选中”Classes“中的”component“,点击“remove”按钮,将类component移除,再点击”Add>>“添加新类huatu,结果如图5,

点击”OK“,接下来出现一个对话框,选择”Yes“.

图5 com组件属性设置2

4. 添加文件:选中左边工作区的”huatu“,点击Project->Add File,选择已经编辑好的函数文件huatu.m,如图6。需要注意的是m文件必须是m函数,否则会报错,如果是m脚本文件的话,只需要改为无输入输出参数的m函数即可。

图6 添加m文件

5、生成 com组件:点击Build->COM Object,结果如图7。

图7

com组件已经由matlab做好,默认的保存位置为:matlab安装位置workcomponent。

VC中调用COM组件,步骤如下:

1、在VC中建立名为ComHuaTu的基于对话框的MFC(exe)。

2、面板上添加一个名为“画图”的button按钮,如图8。

图7 工程界面

3、将component_idl.h 和component_idl_i.c文件拷贝到VC建立的工程ComHuaTu目录下。两文件默认目录为workcomponentsrc

4、将上面两文件加入工程:工程->添加工程->Files,选择刚刚拷到目录下的component_idl.h 和component_idl_i.c文件。

5、将目录/extern/include/下的mwcomtypes.h拷贝到工程ComHuaTu目录下,并加入到工程中,方法同上。

6、为程序添加头文件component_idl.h 、component_idl_i.c和mwcomtypes.h,结果如图9

图9 添加头文件

7、按钮画图函数添加代码:

图10 添加按钮函数代码

vc编程技巧总结 第8篇

1 VC编程概述

VC是一种软件集成开发环境,它是由微软公司开发完成的,换个角度理解就是基于C++的一个开发平台。VC是基于Windows平台的一种C++编程环境,包括MFC、ATL、COM等,此外还具有Windows平台的特性。基于Windows下的VC编程需要掌握Windows的消息机制和回调(callback)函数的原理。MFC是需要理解文档视图类的结构、窗口类的结构、消息流向等的Win32API的包装类。COM是一个需要掌握其基本原理代码共享的二进制标准。除此之外,VC是一个主流的开发平台,它不属于语言。如果将C++视为工业标准,那VC则是遵循工业标准的前提下衍生出来的某种厂商标准的操作系统平台。VC是一种包括WIN API和MFC方式的在Windows平台下开发的VC应用程序,MFC是对传统的WIN API再次封装,其结构相比较简单,所以MFC的开发模式备效率优势更加明显。

2 VC编程网络在线监测功能的模块化

要实现类似MFC的网络状态在线监测和数据分析,就必不可少的需要借助VC相应的功能,例如强大的网络通信板块、多线程开发板块等。在监测软件的开发过程中,充分利用VC成熟的开发资源平台,开发建立有针对性的应用功能模块,做到开发效率和软件质量的双赢,其主要包括以下环节:(1)功能模块设计。MFC应用的实际上是TCP/IP协议组主要用在IP主机、路由器之间传递控制消息的一个子ICMP协议。Windows给予了ASMP.dll的支持,能够从VC中直接引用,但是不支持移植,另外无法控制网络信息的数据包。因此,在基于工程中包含adewfxsock.hfg库的前提下,借助VC技术能够直接针对套接字(socket)进行有效编程,勾选了一个和MFC程序一样发送32字节的数据信息,得到数据包大小和TTL值的回馈,编程过程及系统调用时序,如图1所示。(2)网络状态在线监测。首先,构建套接字符串,然后指定使用的ICMP协议。其次,发送air_ICMP数据包,初试化ECHORHHGEQUEST的types为9的响应请求指令,然后通过系统调用发送ICMPSD数据,并设置目标IP地址。(3)监测套接字符串网络在线状态,检测一个或多个套字符串的状态。(4)响应数据的识别,判断网络在线监测状态。最终,在回馈的数据当中包含了该次在线监测的结果。至此,同MFC方式一样,通过VC编程实现网络状态在线监测。

3 VC多线程编程网络状态在线监测

进程和线程都可以被看作操作系统的概念。通过应用程序执行实例的过程被称作进程,私有的虚拟地址空间、代码、数据和其他各种系统资源共同构成了每个进程,并且在运行模拟的过程中进程的终止会销毁创建的资源,使得进程终止时,所使用的系统资源获得释放或关闭。线程以一个执行单元的形式存在于进程内部。系统创建好进程后,同时也就启动了以函数地址形式执行的进程的主执行线程,并且,Windows系统也将接受来自主执行线程的指令。主执行线程的行为状态最终决定了进程的行为状态。每一个进程都需要一个由系统自动创建的而不需要用户操作的线程。用户可以根据网络监测具体项目,来创建对应的程序在同一个进程中所需要的多个线程。网络状态在线监测模块,在不需要用户界面交互的条件下,能够自动获取所需要的目标IP地址数据,并通过该地址数据创建单独的线程,定时实现后台运行在线网络状态监测。线程之间的通讯之所以方便,是因为在一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,最终使得多线程技术的应用广泛流行。除此之外,为了减少某项任务的长时间占用CPU,多线程可以通过并行处理的方式来实现此功能。可以通过适当的人机交互界面和配置数据管理的方式,来搭建一个完整的VC编程控制的网络在线监测应用系统。该系统系统功能包括网络监测完成网络节点通阻状态的存储;状态显示完成网络节点通阻状态的监测;节点管理完成网络节点通阻状态的分析;指标分析完成网络节点通阻状态的显示。网络状态在线状态的显示是通过客户端图形模式和动态网页模式构成。客户端图形模式采用的是可以对系统监测周期和节点属性等参数进行配置的C/S架构,除此之外,该构架还可以查看节点监测通阻状态和大数据的整理与分析,最终得到故障原因及解决方案。而浏览器网页模式主要用于查看节点状态和指标分析数据。

4 结束语

基于VC编程充分利用了MFC总线的多节点、远距离、实时性好等优点,设计出了一套高效实用的网络在线监测系统,而且该系统具有直观实用的界面和高效简便的编程方式,在监测系统的应用很广泛。

参考文献

[1]赵立群,吴霞,孙岩.计算机网络管理与安全[M].北京:清华大学出版社,2014.

[2]罗莉琴,詹祖桥,黄辉等.Windows网络编程[M].北京:人民邮电出版社,2011.

[3]潘磊,裴斐.一种面向大规模网络拓扑发现的研究[J].计算机工程与应用,2010,46(19).

[4]DAVID.VISUAL C++6编程宝典[M].北京:电子工业出版社,2005.

vc编程技巧总结

vc编程技巧总结(精选8篇)vc编程技巧总结 第1篇1.等于号=表示赋值操作;= =表示逻辑操作。在使用if或(a= =b)时候需要注意。2.浮点型数...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部