怎样用c语言在vc上编写可视化?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用c语言在vc上编写可视化?相关的知识,希望对你有一定的参考价值。

用API函数来编程,完全可以实现可视化的应用。
#include <windows.h>
#include "resource.h"

#define _UNICODE
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)

static TCHAR szAppName[] = TEXT ("CommonDlg") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_MYICON)) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = MAKEINTRESOURCE(IDM_MYMENU) ;
wndclass.lpszClassName = szAppName ;

if (!RegisterClass (&wndclass))

MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;


hwnd = CreateWindow (szAppName, // window class name
TEXT ("CommonDlg"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters

ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))

TranslateMessage (&msg) ;
DispatchMessage (&msg) ;

return msg.wParam ;


LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
HBRUSH hbrush ;
CHOOSECOLOR cc ; //颜色对话框结构
static COLORREF rgbColorDlg, rgbFontDlg ;
static COLORREF acrCustClr[16];

CHOOSEFONT cf; // 字体对话框结构
static LOGFONT lf; // 逻辑字体的结构
static HFONT hfont, hfontPrev;

OPENFILENAME ofn; // 打开、另存为对话框结构
static TCHAR szFile[MAX_PATH]; //存储路径、文件名的缓冲区
static TCHAR szFilter[] = TEXT ("Common Dialog Files (*.CDF)\0*.cdf\0")
TEXT ("文本文件 (*.TXT)\0*.cdf\0")
TEXT ("All Files (*.*)\0*.*\0\0") ;

switch (message)

case WM_COMMAND:
switch(LOWORD(wParam))

case IDM_FILE_OPEN: // 创建"打开"通用对话框

ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = szFilter ;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH ;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// 创建对话框,若对话框结束后返回TRUE,则将ofn的lpstrFile域中返回
// 文件名复制到缓冲区szFile

if (GetOpenFileName(&ofn) == TRUE)

strcpy(szFile, ofn.lpstrFile );
MessageBox(hwnd, szFile, "打开完毕", MB_OK | MB_ICONINFORMATION) ;

return 0 ;

case IDM_FILE_SAVE: // 创建"另存为"通用对话框
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = szFilter ;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH ;
ofn.lpstrDefExt = TEXT(".cdf") ;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// 创建对话框,若对话框结束后返回TRUE,则将ofn的lpstrFile域中返回
// 文件名复制到缓冲区szFile

if (GetSaveFileName(&ofn) == TRUE)

strcpy(szFile, ofn.lpstrFile );
MessageBox(hwnd, szFile, "保存完毕", MB_OK | MB_ICONINFORMATION) ;

return 0;

case IDM_FILE_EXIT:
PostMessage(hwnd, WM_QUIT, wParam, lParam);
return 0 ;

case IDM_SET_FONT: // 创建"字体"通用对话框

ZeroMemory(&cf, sizeof(CHOOSEFONT)) ;
cf.lStructSize = sizeof (CHOOSEFONT);
cf.hwndOwner = hwnd;
cf.lpLogFont = &lf;
cf.rgbColors = rgbFontDlg ;
cf.Flags = CF_SCREENFONTS | CF_EFFECTS;

// 对话框结束返回若为TRUE,则以返回的字体信息创建逻辑字体
if (ChooseFont(&cf)==TRUE)

hfont = CreateFontIndirect(cf.lpLogFont);
rgbFontDlg = cf.rgbColors;


InvalidateRect(hwnd, NULL, TRUE) ;
return 0 ;

case IDM_SET_COLOR: // 创建"颜色"通用对话框

ZeroMemory(&cc, sizeof(CHOOSECOLOR));
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = hwnd;
cc.lpCustColors = (LPDWORD) acrCustClr;
cc.Flags = CC_FULLOPEN ;

if (ChooseColor(&cc) == TRUE)

rgbColorDlg = cc.rgbResult;
hbrush = CreateSolidBrush(rgbColorDlg);
SetClassLong(hwnd, GCL_HBRBACKGROUND, (LONG)hbrush);// 改变客户区的颜色

InvalidateRect(hwnd, NULL, TRUE) ;

return 0 ;


break;

case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect(hwnd, &rect) ;

if(rgbColorDlg != 0)
SetBkColor(hdc, rgbColorDlg);

if(hfont != 0 )

SelectObject(hdc, hfont);
SetTextColor(hdc, rgbFontDlg);


DrawText(hdc, TEXT("通用对话框"), -1 , &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);

EndPaint (hwnd, &ps) ;
return 0 ;

case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;

return DefWindowProc (hwnd, message, wParam, lParam) ;

是否能看懂
参考技术A windows编程可以在vc上使用C++进行可视化编程,推荐看一下孙鑫的《深入详解vc++》,至于C语言,可视化的程序应该会使用到图形化模式(可以做游戏~~~~),建议网上搜下,是比较早的东西了 参考技术B 用windows api

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

工控课堂

工控课堂【www.gkket.com】工程师必备网站

电气工控自动化-超万元免费资料

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤



1.C语言程序四步开发步骤

(1)编辑。可以用任何一种编辑软件将在纸上编写好的C语言程序输入计算机,并将C语言源程序文件*.c以纯文本文件形式保存在计算机的磁盘上(不能设置字体、字号等)。

(2)编译。编译过程使用C语言编译程序将编辑好的源程序文件“*.c”,翻译成二进制目标代码文件“*.obj”。编译程序对源程序逐句检查语法错误发现错误后,不仅会显示错误的位置(行号),还会告知错误类型信息。我们需要再次回到编辑软件修改源程序的错误,然后,再进行编译,直至排除所有语法和语义错误。

(3)连接。程序编译后产生的目标文件是可重定位的程序模块,不能直接运行。连接将编译生成的各个目标程序模块和系统或第三方提供的库函数“*.lib”连接在一起,生成可以脱离开发环境、直接在操作系统下运行的可执行文件“*.exe”。

(4)运行程序。如果经过测试,运行可执行文件达到预期设计目的,这个C语言程序的开发工作便到此完成了。如果运行出错,这说明程序处理的逻辑存在问题,需要再次回到编辑环境针对程序出现的逻辑错误进一步检查、修改源程序,重复编辑→编译→连接→运行的过程,直到取得预期结果为止。

2.Visual C++ 6.0 开发环境介绍

Visual C++ 6.0(以后简称 VC)是 Microsoft公司推出的可视化开发环境Developer Studio下的一个组件,为我们提供了一个集程序创建、编辑、编译、调试等诸多工作于一体的集成开发环境(IDE)。

VC集成开发环境功能强大,不仅提供了大量的向导(Wizard ),还有完备的帮助功能(MSDN)。所以,初学者学习 C语言编程,并不需要全面了解开发环境的全部功能。我们可以在安装 VC时选择完全安装 MSDN,然后在遇到问题时再去查阅 MSDN中的相关说明。通过“开始”菜单或桌面快捷方式启动 Visual C++进入集成开发环境,如图 1-1 所示。

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

图1-1 Visual C++界面


跟大多数的 Windows 应用程序一样,Visual C++最上面是菜单,然后是工具栏,中央是工作区(左侧窗口是项目工作区,C 程序员可以在 ClassView 页的Globals 全局选项里查看到正在开发的全局变量和全局函数,右侧窗口是编辑窗口,可以同时对多个文挡进行编辑)。最下面状态栏上面的窗口是输出窗口,主要用于显示编译、连接信息和错误提示,我们可以双击错误提示行,VC 会在编辑窗口内打开出错代码所在的源程序文件,并将光标快速定位到出错行上。

在编辑窗口内输入、编辑程序源代码时,源代码会显示"语法着色"。在缺省情况下,代码为黑色,夹以绿色的注 释和蓝色的关键字(指 VC 所保留的 public、private、new 和 int 等等)。我们还可以通过 Tools 菜单下的 Options 对话框中的 Format 选 项卡进一步设置指定颜色。

2.1 项目

开发一个应用程序,往往会有很多源程序文件、菜单、图标、图片等资源,VC 通过“项目”管理上述资源。所以,在开始开发 C 程序时,我们就要在一个指定文件夹内创建一个以.DSW 为扩展名的项目工作区文件,包含项目中所有文件的名称、 文件所在目录、编译器和连接器的选项以及项目工作的其他信息;此外还有以.DSP 为扩展名的项目记录文件,以.OPT 为扩展名的工作区选项文件(包含 Developer Studio 的所有个人设置 - 包括颜色、字体、工具栏、哪个文件被打开以及 MDI 窗口如何被定位和最新调试中的断点)等。在打开项目工作区文件时其他文件随即会自动打开。在此文件夹下还会创建 Res(资源)、Debug(调试)、Release(发行)等子文件夹。

2.2编辑

在编辑窗口打开、浏览文件、输入、修改、复制、剪切、粘贴、查找、替换、撤销等操作,可以通过菜单完成,也可以通过工具栏按钮完成,这些与 Word 之类的 windows 编辑器用法完全相同,这里就不再重复叙述了。

2.3辅助

VC 不仅提供了“语法着色”帮助我们阅读程序,还可以通过一些快捷键检查常见的括号不匹配错误。MSDN 也可以在编辑过程中提示存在的变量名、函数名。很多程序员借助类似 Visual Assist X 的工具辅助开发,减少程序出错的可能性。

3.开发 C 程序

3.1开发单个 C 语言程序

1. 创建一个工作文件夹。

由于开发过程会产生一系列文件,建议每开发一个新的 C 程序都创建一个工作文件夹。还可以将所有工作文件夹集中到一起,如E:LXHEX01-01 、E:LXHEX03-02 等。

2. 启动 Visual C++。

3. 新建一个 C 语言源程序。

选择菜单:File 下的 New 菜单项,出现如图 1-2 所示 new(新建)对话框。

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

图1-2 选择菜单File下的New菜单项


选择 Files 标签下的 C++ Source File 在“E:LXHEG01-01”文件夹中创建C 程序:eg01-01.c,如图 1-3 所示。

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

图1-3 Files标签


4. 输入、编辑源程序。

注意不要输入中文标点符号,要及时按 Ctrl+S 保存文件,如图 1-4 所示。

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

图1-4 输入源程序


5. 编译、连接。

点击“Build MiniBar”工具栏上的“Build”按钮进行编译、连接。也可以选择菜单 Build 下的 Build (F7) 菜单项或 Rebuild All 菜单项。更简捷的方法是直接按 F7 功能键。Visual C++将提示创建默认工作区,如图 1-5 所示。

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

图1-5 创建默认工作区


点击“是”按钮。如果编译完全成功,会显示 "0 error(s), 0 warning(s)"。如果出现语法错误,则要返回 4 修改源程序。然后,再进行编译,直至排除所有错误。

6. 运行

点击“Build MiniBar”工具栏上的“Execute Program”按钮运行程序。也可以选择菜单 Build 下的 Execute eg01-01.exe 菜单项。更简捷的方法是直接按功能键 Ctrl+F5 运行程序。若运行结果正确,则 C 语言程序的开发工作到此完成。否则,要针对程序出现的逻辑错误返回 4 修改源程序,重复编译—连接—运行的过程,直到取得预期结果为止。

7. 关闭

如果不退出 Visual C++,接着开发下一个 C 程序,需要先选择菜单 File 下的 close workspace 菜单项关闭当前工作区,然后再按照 1-7 步骤开发下一个 C程序

3.2添加多个 C 语言源程序

在用 C 语言开发应用程序时,往往会使用多个 C 语言源程序。

现有 C 语言源程序文件“sayhello.c”:

#include

<stdio.h>

void sayhello(void)

{

printf("hello ");

}

将其添加到“eg01-01.c”的步骤如下:首先打开“eg01-01.dsw”,点击项目工作区 ClassView 页的 Globals 选项,选择菜单 Project 下的“Add To Project”菜单项的“Files……”

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

图1-6 添加多个源程序文件


然后在“Insert Files intoProject”对话框中选取“sayhello.c”:

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

图1-7 选择欲添加的源程序文件


再在 main()函数中添加子函数说明和调用:

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

图1-8 添加子函数说明和调用

程序运行结果如图 1-9 所示:

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

图1-9 程序运行结果


4.调试 C 程序

初学 C 语言程序设计,往往一看到自己编的程序出现错误就不知所措了。有些同学上机时,只要程序能够顺利运行,就认为大功告成,根本没想到程序还存在某些隐患。要想不犯或少犯错误,就需要了解 C 语言程序设计的错误类型和纠正方法。C 语言程序设计的错误可分为语法错误、连接错误、逻辑错误和运行错误。

语法错误:在编写程序时违反了 C 语言的语法规定。语法不正确、关键词拼错、标点漏写、数据运算类型不匹配、括号不配对等都属于语法错误,在进入程序编译阶段,编译系统会给出出错行和相应“出错信息”。我们可以双击错误提示行,将光标快速定位到出错代码所在的出错行上。根据错误提示修改源程序,排除错误。

连接错误:如果使用了错误的函数调用,比如书写了错误的函数名或不存在的函数名,编译系统在对其进行连接时便会发现这一错误。纠正方法同 1。

逻辑错误:虽然程序不存在上述两种错误,但程序运行结果就是与预期效果不符。逻辑错误往往是因为程序采用的算法有问题,或编写的程序逻辑与算法不完全吻合。逻辑错误比语法错误更难排除,需要程序员对程序逐步调试,检测循环、分支调用是否正确,变量值是否按照预期产生变化。

运行错误:程序不存在上述错误,但运行结果时对时错。运行错误往往是由于程序的容错性不高,可能在设计时仅考虑了一部分数据的情况,对于其他数据就不能适用了。例如打开文件时没有检测打开是否成功就开始对文件进行读写,结果程序运行时,如果文件能够顺利打开,程序运行正确,反之则程序运行出错。要避免这种类型的错误,需要对程序反复测试,完备算法,使程序能够适应各种情况的数据。

为了方便程序员排除程序中的逻辑错误,VC 提供了强大的调试功能。每当我们创建一个新的 VC工程项目时,默认状态就是 Debug(调试)版本。调试版本会执行编译命令_D_DEBUG,将头文件的调试语句 ifdef分支代码添加到可执行文件中;同时加入的调试信息可以让开发人员观察变量,单步执行程序。由于调试版本包含了大量信息,所以生成的 Debug版本可执行文件容量会远远大于Release(发行)版本。

4.1 设置断点

VC 可以在程序中设置断点,跟踪程序实际执行流程。设置断点后,可以按“F5”功能键启动 Debug 模式,程序会在断点处停止。我们可以接着单步执行程序,观察各变量的值如何变化,确认程序是否按照设想的方式运行。设置断点的方法是:将光标停在要被暂停的那一行,选择“Build MiniBar”工具栏按钮“Insert/Remove Breakpoint (F9)”按钮添加断点,如图 1-10 所示,断点所在代码行的最左边出现了一个深红色的实心圆点,这表示断点设置成功。

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

图1-10 设置断点


如果该行已经设置了断点,那么再次按“F9”功能键会清除该断点。

4.2调试命令

我们也可以在 VC“Build”(组建)菜单下的“Start Debug”(开始调试)中点击 Go(F5)命令进入调试状态,Build 菜单自动变成 Debug 菜单,提供以下专用的调试命令:

Go(F5) 从当前语句开始运行程序,直到程序结束或断点处。

Step Into(F11) 单步执行下条语句,并跟踪遇到的函数。

Step Over(F10) 单步执行(跳过所调用的函数)

Run to Cursor(Ctrl+F10) 运行程序到光标所在的代码行。

Step out(Shift+F11) 执行函数调用外的语句,并终止在函数调用语句处。

Stop Debugging(Shift+F5) 停止调试,返回正常的编辑状态

必须在运行程序时用 Go 命令(而不是 Execute)才能启动调试模式。在调试模式下,程序停止在某条语句,该条语句左边就会出现一个黄色的小箭头。我们随时中断程序、单步执行、查看变量、检查调用情况。比如,按“F5”功能键进入调试模式,程序运行到断点处暂停;不断按“F10”功能键,接着一行一行地执行程序,直到程序运行结束。

需要说明的是,如果希望能一句一句地单步调试程序,在编写程序时就必须一行只写一条语句。

4.3察看变量

单步调试程序的过程中,我们可以在下方的Variables (变量)子窗口和Watch(监视) 子窗口中动态地察看变量的值,如图 1-11 所示。Variables 子窗口中自动显示当前运行上下文中的各个变量的值变量,而 Watch 子窗口内只显示在此 Watch 子窗口输入的变量或表达式的值。随着程序的逐步运行,也可以直接用鼠标指向程序中变量查看其值。例如在图 1-11 中,我们可以清楚地看到,程序已经为自动型变量 first、second、big 分配了内存,但它们的初始值是随机的。

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

图1-11 察看变量


Variables 子窗口有 3 个选项卡:Auto、Locals 和 This。

Auto 选项卡:显示出当前语句和上一条语句使用的变量,它还显示使用 Step over 或 Step out 命令后函数的返回值。

Locals 选项卡:显示出当前函数使用的局部变量。

This 选项卡:显示出由 This 所指向的对象(C 语言不用 this)。

如果变量较多,自动显示的Variables 窗口难以查看时,还可以在右边的Watch

子窗口中添加想要监控的变量名。例如,图 1-11 在 Watch1 子窗口中添加了变量“first”。我们还可以直接将变量拖动到 Watch

子窗口的空白 Name 框中。添加结束后,该变量的值会被显示出来。并且随着单步调试的进行,会看到变量 first

的值逐渐变化。如果各变量的值按照设想的方式逐渐变化,程序运行结果无误,本次开发就顺利结束了。如果发现各变量值的变化和设想的不一致,说明程序存在逻辑错误,那就需要停止调试,返回编辑窗口,查错并修改程序。

4.4查看内存

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

图1-12 察看内存

转发是最大的鼓励!谢谢您的支持!

重要通知

想加入工控上位机学习技术交流群

请添加班长为好友

并备注:地区-行业-姓名昵称获取进群资格。

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

工控上位机学习
专业专注分享

      

——————————————————————

 来源:网络-百度文库,侵删!

▣ 声明:本文素材系网络收集,工控上位机学习编辑整理。文中所用视频、图片、文字版权归原作者所有。但因转载众多,无法确认真正原始作者,故仅标明转载来源。如涉及作品版权问题,烦请及时联系17621634088(微信同号),我们将即刻确认版权并按国家相关规定支付稿酬!


C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

她们都关注了,你还等什么?

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤 C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤 C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤 C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤 C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤 C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤 C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

 猛戳阅读原文,开启电气工控自动化之路

以上是关于怎样用c语言在vc上编写可视化?的主要内容,如果未能解决你的问题,请参考以下文章

怎样用vc编译C语言文件,请详细说明步骤

编程语言学vb好还是c

VS或者VC6.0编写的C语言程序,怎样能够实现串口数据的收发?

基于VC的MFC界面开发

C/C++编程笔记:VC++6.0环境下调试 C语言 代码的方法和步骤

怎样用C语言编写个爱心图象