加载中…
个人资料
JackieWang
JackieWang
  • 博客等级:
  • 博客积分:0
  • 博客访问:2,050
  • 关注人气:142
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

第1课用C语言函数编写对话框之一直接实践

(2012-02-07 20:46:35)
标签:

windows

程序

设计

教育

分类: MFC程序设计

1课 用C语言函数编写对话框之一直接实践

【参考资料:孙鑫VC++教学视频】

 

学习理论总是有点枯燥,而且也需要耐心,慢慢的去理解;那我们就直接实践,动手完成一个用C语言系统函数(API函数)实现的对话框;

 

一、实现步骤,总共5个步骤;

★★★★★创建一个完整的窗口需要经过下面四个操作步骤:

1)、设计一个窗口类(其实是一个结构体);如:WNDCLASS wndcls;

     就是为这个结构体的各个分量赋值,设计一个窗口;

2)、注册窗口类; 如:RegisterClass(&wndcls);

3)、创建窗口; 如:CreateWindow(),CreateWindowEX();

4)、显示及更新窗口。如:ShowWindow(),UpdateWindow();

5)、消息循环GetMessage从消息队列中获得消息;

 

二、编程实现

1、建立空工程:win32 Application工程;

2、建立源文件:C++Source文件,不是头文件;

3、加头文件:windows.h, stdio.h;

4、定义主函数:WinMain函数,从msdn中拷贝函数头部;

具体做法:msdn索引中搜索WinMain,出现多个主题,选择Windows User InterfacePlatform SDK;不要选择Windows CE API Reference;

拷贝并修改为:

int WINAPI WinMain(

  HINSTANCE hInstance,      // handle to current instance

  HINSTANCE hPrevInstance,  // handle to previous instance

  LPSTR lpCmdLine,          // command line

  int nCmdShow              // show state

)

{

      。。。。。。。。

}

5、主函数的参数暂且不表,后面有时间再补充;

现在我们准备实现主函数体:

     //第一步:设计窗口;WndClass,实际上是一个结构体;

       WNDCLASS wndcls;

       wndcls.cbClsExtra=0;

       wndcls.cbWndExtra=0;

       wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);

       wndcls.hCursor=LoadCursor(NULL, IDC_CROSS);

       wndcls.hIcon=LoadIcon(NULL, IDI_ERROR);

       wndcls.hInstance=hInstance;

       wndcls.lpfnWndProc=WinSunProc;

       wndcls.lpszClassName="Weixin2003";

       wndcls.lpszMenuName=NULL;

       wndcls.style=CS_HREDRAW | CS_VREDRAW;

 

       //第二步:注册窗口;

       RegisterClass(&wndcls);

 

       //第三步:创建窗口;

       HWND hwnd;

       hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中心",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);

 

       //第四步:显示窗口

       ShowWindow(hwnd, SW_SHOWNORMAL);

       UpdateWindow(hwnd);

 

       //第五步:创建消息循环

       MSG msg;

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

       {

              TranslateMessage(&msg);

              DispatchMessage(&msg);

       }

 

6、主函数里面已经完成,接下来我们要创建窗口过程函数;

★用switch来处理各种消息;

switch(uMsg)

       {

       case WM_CHAR:

              char szChar[20];

              sprintf(szChar, "char is %d", wParam);

              MessageBox(hwnd, szChar,"weixin",0);

              break;

       case WM_LBUTTONDOWN:

              MessageBox(hwnd,"mouse clicked", "weixin", 0);

              HDC hdc;

              hdc=GetDC(hwnd);

              TextOut(hdc, 0, 50, "计算机编程语言培训", strlen("计算机编程语言培训"));

              ReleaseDC(hwnd, hdc);

              break;

       case WM_PAINT :

              HDC hDC;

              PAINTSTRUCT ps;

              hDC=BeginPaint(hwnd, &ps);

              TextOut(hDC, 0, 0, "维新培训", strlen("维新培训"));

              EndPaint(hwnd, &ps);

              break;

       case WM_CLOSE:

              if(IDYES==MessageBox(hwnd, "是否真的结束", "weixin", MB_YESNO))

              {

                     DestroyWindow(hwnd);

              }

              break;

       case WM_DESTROY:

              PostQuitMessage(0);

              break;

       default:

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

             

       }

 

可以运行看效果,第一课最感性的直接实践就结束了,当然,对里面有些代码还会存在一些疑问,接下去会慢慢分析【待续】。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有