cw 10.6支持ubuntu c语言开发环境吗

商品编号:
京 东 价:
[定价:¥]
支  持:
合约套餐:
请选择套餐内容
 您选择的地区暂不支持合约机销售!
白条分期:
在线客服:
服务支持:
C语言开发入门教程
加载中,请稍候...
商品介绍加载中...
扫一扫,精彩好书免费看
京东商城向您保证所售商品均为正品行货,京东自营商品开具机打发票或电子发票。
凭质保证书及京东商城发票,可享受全国联保服务(奢侈品、钟表除外;奢侈品、钟表由京东联系保修,享受法定三包售后服务),与您亲临商场选购的商品享受相同的质量保证。京东商城还为您提供具有竞争力的商品价格和,请您放心购买!
注:因厂家会在没有任何提前通知的情况下更改产品包装、产地或者一些附件,本司不能确保客户收到的货物与商城图片、产地、附件说明完全一致。只能确保为原厂正货!并且保证与当时市场上同样主流新品一致。若本商城没有及时更新,请大家谅解!
权利声明:京东上的所有商品信息、客户评价、商品咨询、网友讨论等内容,是京东重要的经营资源,未经许可,禁止非法转载使用。
注:本站商品信息均来自于合作方,其真实性、准确性和合法性由信息拥有者(合作方)负责。本站不提供任何保证,并不承担任何法律责任。
印刷版次不同,印刷时间和版次以实物为准。
加载中,请稍候...
Jow905(上海)
山清水秀2013(浙江)
jd_0(辽宁)
jd_138951kym(广东)
陌曦丶Cross(湖北)
jd111316ftx(山东)
jd_尘封了的记忆(辽宁)
jd529774(辽宁)
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
浏览了该商品的用户还浏览了
加载中,请稍候...
七日畅销榜
新书热卖榜
iframe(src='///ns.html?id=GTM-T947SH', height='0', width='0', style='display: visibility:')从C语言实战谈编程:vi(编辑源程序)上() - n216 - 博客园
posts - 107, comments - 1898, trackbacks - 6, articles - 0
一、&上篇要点回顾和点评
1、上篇对hello world程序进行了比较深入分析。
2、一个完整程序是什么样的?分几个部分组成?请回顾一下!
3、谈了main,这个是讨论最激烈的话题。请问为啥我没有写成 int main(void)?
4、还谈了,语法、函数的调用、.h的引用、关键字、转义符、流。还记得吗?
5、知道exit和return的区别和用的地方吗?
6、布置了思考题:显示三个hello world!你是怎样完成的?
1)连续写3行fprintf
2)用循环语句循环3次fprintf
3)在原fprintf中hello world!\n后面,添加hello world!\n hello world!\n
4)其他方法。
你是用哪种方法?。
出这思考的目的就是告诉大家,一个问题有很多答案,但是不同答案一定有优劣之差。我们不但要给出答案,而且要给出最佳答案,这样我们才能提升我们的编程水平。
7、上篇最重要的是,提出来程序好坏的比较的量化标准,那就是程序的长短。没有了量化标准,任何一个程序员都会说自己的最好,(很多人习惯这种思维方式,用每个人有每个人方法,这样可以保护自己的弱点,但是他们不知道,这种保护是你进步最大的障碍)如果这样程序也无所谓好坏来,但是,事实上程序差距是很大的。其他的方面的好坏都应该建立这个基础之上。
二、&编辑在C语言中的作用
&&& 1、编辑的概念和内容&&
我们一直说编程的流程:编辑、编译、运行.其中,编辑是编程的第一步。你能说出什么是编辑?编辑文件有哪些吗?一般而言编辑主要是指编辑工具和编辑内容两个方面。编辑工具是指编辑文件的软件。而编辑内容主要是建立项目中的各种源程序、批处理程序和参数文件。记住:编辑是指1、编辑各种源程序 2、批处理程序 3、参数文件。记住这些我们可以有个概念上的掌握。有了这个概念的掌握,今后我们就可以有意识地去去知道我们要掌握那些东西,为这些做好准备。
是指包含程序语言的语句,通过编译可以变成可执行文件和中间文件。例如,C语言中的 *.c、 *.h文件.
2)批处理文件
是指操作系统可以逐行执行的文本文件。这个在C语言中应用很多,例如,批编译命令文件、shell命令等。
3)参数文件
是指程序中为了灵活适应特定的变化,而建立的数据文件。参数文件的特点是不可执行,但可以被程序所调用。
&&2、编辑工具&&
从理论上来说,任何文本编辑软件都可以作为程序的编辑工具。记住这句话有什么用?就是当你想去修改一个源程序的时候,不必非要安装这个语言的开发环境,随手找个编辑软件编辑一下就可以了。由于源程序是文本文件,所以只要能够打开这个文件就可以编辑了。
给新手回忆一下过去的C语言编辑软件:开始的时候,编辑软件和程序设计语言是相分离的。DOS系统那时用的是EDLINE,unix 用的是vi。后来DOS用的是EDIT,再后来用的是记事本、word等,再后来就直接用语言中自带的文本编辑器了。
&& 3、编辑的作用
&& 1、产生源程序
&&&&& 如果我们连编辑都不会,那我们就无法产生源程序,那我们就无法成为程序员了。程序员第一个职责可能就是会编写程序。可见掌握编辑工具是多么重要。
&& 2、编辑程序
&&&&& 程序并不是一次产生就ok,在绝大多数情况下,程序员要不断地修改,不断地增加自己的程序,而编辑正是实现这种修改的有利的工具,没有编辑工具,发现程序错误,就可能无法修改。
&& 3、调试程序
&&&&& 我们在调试程序的时候,会查看源程序到底是怎么写的。dbx 这个C语言调试程序中就提供了一个e命令,用vi打开源程序,以帮助调试者去发现错误的原因。
&& 4、编辑程序用到的参数文件和批命令文件
&&&& 现实中很少有那种没有参数的C语言的应用程序,C语言需要输入,才能加工后输出,因此程序员不但要编写程序,而且还要编辑参数文件,以便程序顺利运行。
&&&& 另外,一个问题的解决很少是一个程序就能摆平的,因此,逻辑性地运行不同的程序,即使得程序更加模块,又可以使得程序组合更加灵活,更可以让程序象接龙一样,不断向前。因此,编辑批命令文件也是编辑程序一个重要的功能。
三、&如何学习vi
&&下面言归正传,C语言可以有很多编辑程序:有行编辑,有屏幕编辑,有unix的编辑,有window的编辑,有功能强大的编辑程序,也有功能简单的编辑程序,有开发语言自带的编辑程序,也有独立的编辑程序。以我的经验,如果你是专业从事unix环境的后台程序开发的,且用C语言的,vi一定是首选的编辑程序。
1、首先学习vi并不难,千万不要有畏难情绪,任何人都能学会,而且时间不长,有人指导,一般一天就足够入门了。
2、最好找一个懂vi的人作为咨询对象,不要抱着书学,然后就可以开始进行了。
3、注意学习方法,先不要问为啥,先按要求去做,学会模仿,然后再自己琢磨。
4、在练习之前,大家要记住2点:第一,vi不是一个屏幕编辑器,而是一个行编辑,以行为单位进行的编辑。不用鼠标,只能手打。第二个,vi是一个区分大小写的。因此要特别注意vi中各种命令的大小写。
下面我以实战方式,试着教教大家学习vi。
第一步:学习进入vi和退出vi
&& &&首次学习vi的朋友,可以先从运行vi开始。
我们假定编辑的文件名为a.c,则在操作系统的命令行状态下,键入:vi a.c(命令行结束都需要键入回车,这里就不在提示了.另,注意在UNIX操作系统下是认大小写的,不要将vi写成大写VI)
这时你则进入了vi.这时你会看到在屏幕的左下方,显示a.c [New file],这是vi告诉你,你正在编辑a.c,a.c是一个新文件。
进入后,你别急于编辑文字。立即键入::q回车。这时你从vi退出到操作系统命令行状态了。q应该是quit缩写吧。
将进入和退出操作多练习几遍,你就已经学会了使用最简单的vi了。在此间,你要克制如何编辑冲动,先把进入和退出掌握好。学习的时候,我们往往往前考虑过多,其实没有必要,一般只要按部就班学习就行了。在眼前,就学眼前,不要多想。第一步会了,我们往下走。
第二步,学习增加字符串。
这个步骤就是学习如何在vi中增加一个字符串,或者说录入一个字符串。假定,我们要在a.c中录入,“hellow world!”这个字符串。 请按下面次序一字不漏地输入,别输错字符。
3)hellow world!
如果你顺利输入完之后,这个a.c就有了“hellow world!”
你可以在命令行输入cat a.c就能看到:hellow world!,恭喜你会了录入字符串了。
这时你要记住:i是增加命令,表示此后的键入的字符都将录入其中,除非遇到Esc结束这个增加。所以,当你要录入字符串的时候,第一个就要想到i命令,这个命令我是这样记的:i就是insert。
你可以试着编辑一个b.c 内容是 hello myself!看看行吗?
第三步,学习修改、删除。
我们在编辑程序的时候,不可能一次增加就能完成。总是要修改,删除,增加。接上面的例子,我们要将a.c中的hello world!改成hello myself。
第一种方法:
4、hello myself。
这种方法是同过dd命令将原来一行删掉,再通过i命令录入hello myself。来完成的。这种方法重点是dd命令,记住删除一行要用dd(delete,delete,我是这样记忆的)。
第二种方法:
2、将光标移到world
5、myself。
这种方法重点是x命令,删除当前字符,这也是最常用的命令之一。
第三种方法:
2、将光标移到world
7、移动光标到!
这种方法重点是r命令(replace),替换当前字符,这也是最常用的命令之一。
第四种方法:
2、将光标移到world
4、myself。
这种方法重点是cw命令(change word),替换当前单词,注意它也需要Esc结束修改状态,这也是最常用的命令之一。
大家都看到了吧,所有以上方法都是用:x来保存编辑内容的。:x也是最常用命令之一。
如果发现这次编辑错了,乱了,想放弃这次对文件的编辑,不想对原程序进行任何修改。则可以用:q!命令放弃修改退出vi。!可以记忆为强制,q!可以理解为强制退出。同理x!理解为强制保存。
通过以上三步的学习和练习,我们基本上可以接触到vi的基本操作过程和操作命令了。这些基本的操作可以说能够编制程序了。
你们可以试着用以上方法,编辑一下我前几篇博客中的a.c。文件名可改为helloworld.c
&#include “stdio.h”
&&&&& &fprintf(stdout,”hello world!\n”);
&&&&& exit(0);
感觉一下vi操作,看看自己对以上最基本命令的掌握程度。对基础的东西要反复练习,认真记住,这样才会对后面的操作命令有更好的理解和配合。学会以上操作可以说你vi已经入门了。
第四步,学习复制、查询、取消
我们在编辑程序的时候,一般情况下都是增删改操作,这时候我们的视野仅仅局限在单字符、单词、单行。在很多情况下,需要行操作,例如我们需要新增行,我们需要复制,需要先复制再修改。
我们还是举前面一个例子。现在a.c内容为hello myself。
现在要求最终的内容为三行:
hello myself
hello world
第一种方法,先复制,后修改。
5、向上移动一行
6、移动到myself(第二行)
10、移动到下一行
11、移动到myself(第三行)
这种方法的重点是复制,粘贴。yy是复制当前行,p是粘贴复制的行。这是我认为vi最经典的命令设计之一,它可能是我们Ctrl-c ,Ctrl-v的鼻祖。
第二种方法:直接插入法
3、hello word
4、hello c
这种方法的重点是在当前行下插入。o是插入命令,表示在当前行下插入,Esc插入结束。如果要在当前行上面插入行输入大写O则可以了,退出插入也是Esc。
第三种方法:复制查询修改法。
这种方法的重点是先复制了2行hello myself,然后通过:1命令让光标移到文件头(这个命令非常有用),然后用/命令进行查找myself,用n(next)命令移到第二个myself单词上,用cw进行修改,然后再用n命令,移到第三个myself上,用cw修改。/命令是查找命令,n是下一个。现在一些开发语言中也有同样的查询命令,估计也借鉴了vi。
我们在进行操作时候,往往会操作出错,这时候,vi提供了一个u(undo吧)命令,用于取消前次操作。
例如,当你复制2行时候,发现复制了3行的时候,你键入u,则
这个时候,你最后一次,粘贴将会被取消。
这个例子的重点是介绍取消操作u,这个命令可以用于很多种操作,比如,i、I、O、o、A、x、r、dd、cw、s等等。在这些操作之后,键入u,前面的操作将被取消。
另外,介绍一个G命令,这个命令可以让光标定位到文件的最后一行。
例如:文件内容为:
Hello world
Hello myself
当前光标在第一行
键入G,光标就定位在最后一行hello c上了。这个命令对于建立一个程序的时候,特别有用。比如,今天编了一段程序,明天再接着编,就可以用G命令一下子到最后一行,然后,用o命令继续你的新程序的插入。天极传媒:天极网全国分站
您现在的位置:
& &&在C语言Windows应用程序中使用GDI+
在C语言Windows应用程序中使用GDI+天极网 15:52
  GDI+是C++中常用的一种图形图像工具,VB、Delphi等语言也移植了GDI+,.net的诸多语言甚至完全采用GDI+作为绘制其界面。
  在Winsows系统下,几乎所有的API都是直接针对C语言的,除C/C++可直接使用这些API外,其它各种语言都必须移植这些API方法,而唯独GDI+,微软提供的Gdiplus头文件,从类型定义到方法接口,都是针对C++写的,这就使得C语言没法使用这些面向对象的方法,即使是GDI+提供的原始API,如果不重新定义其参数中众多的数据类型,C语言也是没法使用的。
  也许是因为C语言不适合编写Windows界面程序,所以至今没有发现GDI+的C版本(可能有,但我没发现)。因为我是一个业余编程爱好者,平时喜欢摆弄下C/C++、Delphi等,所以用了一些时间,在GDI+的C++版本基础上进行改编了一个C语言的GDI+版本,在改写的过程中,我才知道没发现GDI+的C版本的一个可能的原因是:C++版本中的众多的重载函数,缺省参数,用C来写却是头都大了,不知道用什么函数名才好(考虑GDI+使用了这些年,新的函数名不应与原函数名偏离太远)。
  对于改写的GDI+ C版本,作如下说明:
  一、函数命名,采用下面的几个原则来进行:
  1、尽量按C++版本的GDI+类名作为各种GDI+对象函数名的前缀。如C++原先的Graphics类的函数,前缀都冠以G对那些原本类名很长的类适当进行了一些简化,如StringFormat函数的前缀简化为StrFormat、ImageAttributes函数的前缀为ImageAttr、LinearGradientBrush函数的前缀为LineBrush、PathGradientBrush函数的前缀为PathBrush等等。
  2、C++版本各个类的构造函数和析构函数命名为xxxxCreate和xxxxDelete,其中的xxxx为前缀,如原ImageAttributes类的构造、析构函数名称分别为ImageAttrCreate和ImageAttrDelete等;对于多个构造函数的类,以一个常用的函数命名为xxxxCreate,其余的命名为xxxxFrom****。
  3、对原先的重载函数,以最常用的保留原函数名,其余的冠以一些简单的后缀语义区分;对某些以浮点类型和整数类型作为参数类型的取整数类型为准,浮点类型函数后面加F后缀进行区分。
  4、GDI+ C版本和C++版本一样,直接在头文件中写成FORCEINLINE类型的函数,我测试过VS2005和BCB6及以上版本,VS对FORCEINLINE宏支持为inline函数,而BCB则临时编译为C函数。总之,不需要预先编译静态库。
  二、使用GDI+的C++版本一样,C版本使用前必须使用GdiplusStartup进行初始化,使用完毕也应用GdiplusShutdown进行释放,因为C++的GdiplusStartup的input参数是个类类型,默认构造函数已经进行了参数的初始化,而C版本必须调用MakeGdiplusStartupInput函数进行input参数的初始化,为了减少麻烦,我另写了2个没有参数的函数Gdiplus_Startup和Gdiplus_Shutdown替代。
  三、同GDI+的C++版本一样,使用C版本的应用程序也必须包含Gdiplus的静态连接库Gdiplus.lib。注意:不同的C编译器,其Gdiplus.lib是不同的,如VS就不能使用BCB提供的(或者制作的)静态库,反过来也一样。
  四、GDI+ C版本写成后,使用VS2005和BCB6和BCB2010作了一些主要的应用测试,这些测试代码我会放到我的BLOG上,可作为参考,请随时注意我的BLOG文章,我的BLOG地址为http://blog.csdn.net/maozefa。
  下面是一个简单的C语言Windows程序框架代码,以后写的GDI+测试代码都使用这个框架:
   plaincopy to clipboardprint?
  // Application.h
  #ifndef __APPLICATION_H
  #define __APPLICATION_H
  #include
  #include "..\..\include\Gdiplus_c.h"
  typedef void (*CreateWindowEvent)(void);
  typedef CreateWindowEvent DestroyWindowE
  typedef void (*PaintWindowEvent)(HDC DC);
  typedef void (*CommandEvent)(WORD NotifyCode, WORD itemID, HWND ctlHandle);
  extern HINSTANCE hI
  extern int CmdS
  extern HWND H
  extern CreateWindowEvent CreateP
  extern DestroyWindowEvent DestroyP
  extern PaintWindowEvent PaintP
  extern CommandEvent CommandP
  void InitApplication(HINSTANCE hInst, int cmdShow, BOOL isDoubleBuffer);
  int RunApplication(LPTSTR caption, int width, int height);
  #endif
  // Application.h
  #ifndef __APPLICATION_H
  #define __APPLICATION_H
  #include
  #include "..\..\include\Gdiplus_c.h"
  typedef void (*CreateWindowEvent)(void);
  typedef CreateWindowEvent DestroyWindowE
  typedef void (*PaintWindowEvent)(HDC DC);
  typedef void (*CommandEvent)(WORD NotifyCode, WORD itemID, HWND ctlHandle);
  extern HINSTANCE hI
  extern int CmdS
  extern HWND H
  extern CreateWindowEvent CreateP
  extern DestroyWindowEvent DestroyP
  extern PaintWindowEvent PaintP
  extern CommandEvent CommandP
  void InitApplication(HINSTANCE hInst, int cmdShow, BOOL isDoubleBuffer);
  int RunApplication(LPTSTR caption, int width, int height);
  #endif
  view plaincopy to clipboardprint?
  // Application.c
  #include "Application.h"
  #define WNDCLASSNAME TEXT("Maozefa_Form")
  HINSTANCE hI
  int CmdS
  HWND Handle = NULL;
  // 窗口建立事件过程
  CreateWindowEvent CreateProc = NULL;
  // 窗口摧毁事件过程
  DestroyWindowEvent DestroyProc = NULL;
  // 窗口绘制事件过程
  PaintWindowEvent PaintProc = NULL;
  // 命令事件过程
  CommandEvent CommandProc = NULL;
  static BOOL DoubleBuffer = FALSE;
  BOOL WndPaint(HWND hWnd, HDC DC)
  HDC hDC, memDC;
  PAINTSTRUCT
  HBITMAP memBitmap, oldB
  RECT clientR
  if (!PaintProc) return FALSE;
  if (DC) PaintProc(DC);
  else if (DoubleBuffer == FALSE)
  hDC = BeginPaint(hWnd, &);
  PaintProc(hDC);
  EndPaint(hWnd, &ps);
  GetClientRect(hWnd, &clientRect);
  hDC = GetDC(hWnd);
  memBitmap = CreateCompatibleBitmap(hDC, clientRect.right, clientRect.bottom);
  ReleaseDC(hWnd, hDC);
  memDC = CreateCompatibleDC(0);
  oldBitmap = SelectObject(memDC, memBitmap);
  hDC = BeginPaint(hWnd, &ps);
  SendMessage(hWnd, WM_ERASEBKGND, (WPARAM)memDC, (LPARAM)memDC);
  WndPaint(hWnd, memDC);
  BitBlt(hDC, 0, 0, clientRect.right, clientRect.bottom, memDC, 0, 0, SRCCOPY);
  EndPaint(hWnd, &ps);
  SelectObject(memDC, oldBitmap);
  DeleteDC(memDC);
  DeleteObject(memBitmap);
  return TRUE;
  LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
   (Msg)
  case WM_PAINT:
  if (WndPaint(hWnd, (HDC)wParam))
  return 0;
  case WM_COMMAND:
  if (CommandProc)
  CommandProc(HIWORD(wParam), LOWORD(wParam), (HWND)lParam);
  return 0;
  case WM_DESTROY:
  if (DestroyProc)
  DestroyProc();
  PostQuitMessage(0);
  default:
  return DefWindowProc(hWnd, Msg, wParam, lParam);
  void CreateMainWindow(LPTSTR caption, int width, int height)
  WNDCLASS WinC
  memset(&WinClass, 0, sizeof(WNDCLASS));
  WinClass.style = CS_VREDRAW | CS_HREDRAW;
  WinClass.hInstance = hI
  WinClass.lpfnWndProc = WndP
  WinClass.hCursor = LoadCursor(NULL, IDC_ARROW);
  WinClass.hbrBackground = (HBRUSH)COLOR_WINDOW;
  WinClass.lpszClassName = WNDCLASSNAME;
  if (!RegisterClass(&WinClass))
  Handle = CreateWindowEx(WS_EX_CONTROLPARENT,
  WNDCLASSNAME,
  caption,
  WS_CLIPSIBLINGS | WS_VISIBLE | WS_CLIPCHILDREN |
  WS_BORDER | WS_MINIMIZEBOX | WS_CAPTION | WS_SYSMENU,
  CW_USEDEFAULT, CW_USEDEFAULT, width, height,
  NULL, NULL, hInstance, NULL);
  if (CreateProc)
  CreateProc();
  // 运行应用程序
  int RunApplication(LPTSTR caption, int width, int height)
  Gdiplus_Startup(); // 启动Gdiplus
  CreateMainWindow(caption, width, height);
  if (Handle == NULL)
  return -1;
  ShowWindow(Handle, CmdShow);
  UpdateWindow(Handle);
  while (GetMessage(&msg, NULL, 0, 0))
  TranslateMessage(&msg);
  DispatchMessage(&msg);
  Gdiplus_Shutdown(); // 释放Gdiplus
  return (int)msg.wP
  // 应用程序初始化。其中isDoubleBuffer为使用窗口绘制双缓冲
  void InitApplication(HINSTANCE hInst, int cmdShow, BOOL isDoubleBuffer)
  hInstance = hI
  CmdShow = cmdS
  DoubleBuffer = isDoubleB
  // Application.c
  #include "Application.h"
  #define WNDCLASSNAME TEXT("Maozefa_Form")
  HINSTANCE hI
  int CmdS
  HWND Handle = NULL;
  // 窗口建立事件过程
  CreateWindowEvent CreateProc = NULL;
  // 窗口摧毁事件过程
  DestroyWindowEvent DestroyProc = NULL;
  // 窗口绘制事件过程
  PaintWindowEvent PaintProc = NULL;
  // 命令事件过程
  CommandEvent CommandProc = NULL;
  static BOOL DoubleBuffer = FALSE;
  BOOL WndPaint(HWND hWnd, HDC DC)
  HDC hDC, memDC;
  PAINTSTRUCT
  HBITMAP memBitmap, oldB
  RECT clientR
  if (!PaintProc) return FALSE;
  if (DC) PaintProc(DC);
  else if (DoubleBuffer == FALSE)
  hDC = BeginPaint(hWnd, &ps);
  PaintProc(hDC);
  EndPaint(hWnd, &ps);
  GetClientRect(hWnd, &clientRect);
  hDC = GetDC(hWnd);
  memBitmap = CreateCompatibleBitmap(hDC, clientRect.right, clientRect.bottom);
  ReleaseDC(hWnd, hDC);
  memDC = CreateCompatibleDC(0);
  oldBitmap = SelectObject(memDC, memBitmap);
  hDC = BeginPaint(hWnd, &ps);
  SendMessage(hWnd, WM_ERASEBKGND, (WPARAM)memDC, (LPARAM)memDC);
  WndPaint(hWnd, memDC);
  BitBlt(hDC, 0, 0, clientRect.right, clientRect.bottom, memDC, 0, 0, SRCCOPY);
  EndPaint(hWnd, &ps);
  SelectObject(memDC, oldBitmap);
  DeleteDC(memDC);
  DeleteObject(memBitmap);
  return TRUE;
  LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
  switch (Msg)
  case WM_PAINT:
  if (WndPaint(hWnd, (HDC)wParam))
  return 0;
  case WM_COMMAND:
  if (CommandProc)
  CommandProc(HIWORD(wParam), LOWORD(wParam), (HWND)lParam);
  return 0;
  case WM_DESTROY:
  if (DestroyProc)
  DestroyProc();
  PostQuitMessage(0);
  default:
  return DefWindowProc(hWnd, Msg, wParam, lParam);
  void CreateMainWindow(LPTSTR caption, int width, int height)
  WNDCLASS WinC
  memset(&WinClass, 0, sizeof(WNDCLASS));
  WinClass.style = CS_VREDRAW | CS_HREDRAW;
  WinClass.hInstance = hI
  WinClass.lpfnWndProc = WndP
  WinClass.hCursor = LoadCursor(NULL, IDC_ARROW);
  WinClass.hbrBackground = (HBRUSH)COLOR_WINDOW;
  WinClass.lpszClassName = WNDCLASSNAME;
  if (!RegisterClass(&WinClass))
  Handle = CreateWindowEx(WS_EX_CONTROLPARENT,
  WNDCLASSNAME,
  caption,
  WS_CLIPSIBLINGS | WS_VISIBLE | WS_CLIPCHILDREN |
  WS_BORDER | WS_MINIMIZEBOX | WS_CAPTION | WS_SYSMENU,
  CW_USEDEFAULT, CW_USEDEFAULT, width, height,
  NULL, NULL, hInstance, NULL);
  if (CreateProc)
  CreateProc();
  // 运行应用程序
  int RunApplication(LPTSTR caption, int width, int height)
  Gdiplus_Startup(); // 启动Gdiplus
  CreateMainWindow(caption, width, height);
  if (Handle == NULL)
  return -1;
  ShowWindow(Handle, CmdShow);
  UpdateWindow(Handle);
  while (GetMessage(&msg, NULL, 0, 0))
  TranslateMessage(&msg);
  DispatchMessage(&msg);
  Gdiplus_Shutdown(); // 释放Gdiplus
  return (int)msg.wP
  // 应用程序初始化。其中isDoubleBuffer为使用窗口绘制双缓冲
  void InitApplication(HINSTANCE hInst, int cmdShow, BOOL isDoubleBuffer)
  hInstance = hI
  CmdShow = cmdS
  DoubleBuffer = isDoubleB
  下面是用GDI+函数显示图像的简单例子:
  view plaincopy to clipboardprint?
  #include "..\..\SampleCode\comcode\Application.h"
  void OnPaint(HDC DC)
  PGpBitmap bmp = BitmapFromFile(L"..\\..\\Media\\Source.jpg", FALSE);
  PGpGraphics g = GraphicsCreate(DC); // GDI+ 画布
  GraphicsDrawImageXY(g, bmp, 0, 0);
  GraphicsDelete(g);
  ImageDelete(bmp);
  WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  // 这里使用了双缓冲画窗口 */
  InitApplication(hInstance, nCmdShow, TRUE);
  PaintProc = OnP
  return RunApplication(TEXT("C语言Gdiplus演示例子"), 486, 392);
  #include "..\..\SampleCode\comcode\Application.h"
  void OnPaint(HDC DC)
  PGpBitmap bmp = BitmapFromFile(L"..\\..\\Media\\Source.jpg", FALSE);
  PGpGraphics g = GraphicsCreate(DC); // GDI+ 画布
  GraphicsDrawImageXY(g, bmp, 0, 0);
  GraphicsDelete(g);
  ImageDelete(bmp);
  WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  // 这里使用了双缓冲画窗口 */
  InitApplication(hInstance, nCmdShow, TRUE);
  PaintProc = OnP
  return RunApplication(TEXT("C语言Gdiplus演示例子"), 486, 392);
  下面是BCB2010运行效果图:
(作者:zhengzhong责任编辑:郑重)
欢迎在新浪微博上关注我们
办公软件IT新闻整机

我要回帖

更多关于 c语言开发工具 的文章

 

随机推荐