MFC学习之窗口基础

                          WinMain函数 

1、句柄(HANDLE):{

1. 定义:资源的标识

2. 句柄的作用: 操作系统通过句柄来找到对应的资源,从而对这些资源进行管理和操作。

3句柄的分类:(按资源){

1.图标句柄(HICON) ,

2.光标句柄(HCURSOR) ,

            3. 窗口句柄(HWND) ,

           4.应用程序实列句柄(HINSTANCE).

2、Windows应用程序,操作系统,计算机硬件之间的相互关系

Windows程序的入口函数:

窗口应用程序入口:

Int WINAPI WinMain(

 HINSTANCE hinstance ;  // 应用程序实列句柄

 HINSTANCE hPrevInstance ;  // 基本都设置为0                    

 LPSTR   ipCmdLine ; /commandLLine  LPSTRLP(long point 长指针)

int   nCmdSbow   ;   //显示状态

)  

3、 窗口的创建:

大致来说,如果要创建一个完整的窗口需要经过下面四个操作步骤:{

(1)、设计一个窗口类;

(2)、 注册窗口类 ;

(3)、创建窗口;

(4)、显示及更新窗口。

 }

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<windows.h>
 4 
 5 /*声明winSunProc*/
 6 LRESULT CALLBACK WinSunProc(  HWND hwnd,      // handle to window
 7   UINT uMsg,      // message identifier
 8   WPARAM wParam,  // first message parameter
 9   LPARAM lParam   // second message parameter);
10 );
11 int WINAPI WinMain(  HINSTANCE hInstance,       // handle to current instance
12   HINSTANCE hPrevInstance,                // handle to previous instance
13   LPSTR lpCmdLine,          // command line
14   int nCmdShow              // show state);
15 )
16 {
17     WNDCLASS wndclass;
18     /*声明定义什么的*/    
19     wndclass.cbClsExtra = NULL;  
20     wndclass.cbWndExtra = NULL;
21     wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
22     wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
23     wndclass.hIcon = LoadIcon(NULL,IDI_ERROR);
24     wndclass.hInstance = hInstance;
25     wndclass.lpfnWndProc = WinSunProc ;
26     wndclass.lpszClassName = "Gxjun";
27     wndclass.lpszMenuName =NULL;
28     wndclass.style= CS_HREDRAW|CS_VREDRAW ;
29     RegisterClass(&wndclass);    //注册窗口函数
30     HWND hwnd;
31     hwnd =  CreateWindow("Gxjun","龚细军的第一个窗口程序",WS_OVERLAPPEDWINDOW,0,0,400,600,NULL,NULL,hInstance,NULL);  /*创建窗口*/
32     ShowWindow(hwnd,SW_SHOWNORMAL);    /*显示窗口*/
33     UpdateWindow(hwnd);     
34     MSG msg;
35     while(GetMessage(&msg,NULL,0,0))   
36     {
37        TranslateMessage(&msg);       /*该函数将虚拟键消息转换为字符消息*/
38 
39        DispatchMessage(&msg);        /*该函数分发一个消息给窗口程序。通常消息从GetMessage函数获得。
40                                      消息被分发到回调函数(过程函数),作用是消息传递给操作系统,
41                                      然后操作系统去调用我们的回调函数,也就是说我们在窗体的过程函
42                                      数中处理消息*/
43     }
44 
45     return 0;
46 }
47 LRESULT CALLBACK WinSunProc(  HWND hwnd,      // handle to window
48   UINT uMsg,      // message identifier
49   WPARAM wParam,  // first message parameter
50   LPARAM lParam   // second message parameter);
51   )
52 {
53     
54     switch(uMsg)
55     {
56       case WM_CHAR:  
57           char str[26];
58           sprintf(str,"char is %d",wParam);
59           MessageBox(hwnd,str,"Gxjun",0);
60           break;
61       case WM_LBUTTONDOWN: 
62           MessageBox(hwnd,"mouse clicked","Gxjun",0);
63           HDC hdc;
64           /*PAINTSTRUCT  ps;*/
65           hdc=GetDC(hwnd);
66           TextOut(hdc,200,400,"我是胡萝卜头,呼叫北极站",strlen("我是胡萝卜头,呼叫北极站"));
67           ReleaseDC(hwnd,hdc);    /*函数释放设备上下文环境(DC)供其他应用程序使用。*/
68             break;
69       case WM_PAINT:
70            HDC hdc_1;
71            PAINTSTRUCT paints;
72            hdc_1 = BeginPaint(hwnd,&paints);
73            TextOut(hdc_1,0,0,"我是长城好哇",strlen("我是长城好哇"));
74           break;
75       case WM_CLOSE:
76          if(IDYES==MessageBox(hwnd,"哇哈哈,你丫的真的打算关掉吗?","卖萌之家",MB_YESNO))  {
77             DestroyWindow(hwnd);
78           }
79            break;
80       case WM_DESTROY:
81           PostQuitMessage(0);
82           break;
83       default:
84           return DefWindowProc(hwnd,uMsg,wParam, lParam);
85     }
86     return 0;
87 }

效果图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员的SOD蜜

PDF.NET SOD 开源框架红包派送活动 && 新手快速入门指引

一、框架的由来  快速入门 有关框架的更多信息,请看框架官方主页! 本套框架的思想是借鉴Java平台的Hibernate 和 iBatis 而来,兼有...

32290
来自专栏圣杰的专栏

Asp.net mvc 知多少(十)

本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想...

221100
来自专栏MasiMaro 的技术博文

socket模型处理多个客户端

最近学完了简单的socket编程,发现其实socket的网络编程其实并没有什么难度,只是简单的函数调用,记住客户端与服务端的步骤,写起来基本没有什么问题。 ...

30120
来自专栏24K纯开源

Mac OS X平台下QuickLook开发教程

一、引言       Quick Look技术是Apple在Mac OS X 10.5中引入的一种用于快速查看文件内容的技术。用户只需要选中文件单击空格键即可快...

32480
来自专栏圣杰的专栏

Asp.net mvc 知多少(一)

本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想...

29270
来自专栏一只程序汪的自我修养

手把手教你用.NET Core写爬虫

自从上一个项目58HouseSearch从.NET迁移到.NET core之后,磕磕碰碰磨蹭了一个月才正式上线到新版本。

394120
来自专栏数据和云

监控工具:Oracle 12c Cluster Health Monitor 详解

? 戴明明(Dave) Oracle ACE-A,ACOUG核心成员,宝存科技数据库方案架构师 Dave也是CSDN 认证专家,超过7年的DBA经验,擅长O...

43890
来自专栏liulun

ASP.NET Core教程【一】关于Razor Page的知识

关键文件和目录结构 按照asp.net core WEB应用程序向导,创建一个工程之后 你会发现如下几个目录和文件 wwwroot:放置网站的静态文件的目录 P...

52180
来自专栏黑泽君的专栏

day54_BOS项目_06

第一步:根据提供的 业务受理.pdm 文件生成建表文件 bos_qp.sql 第二步:由于业务受理.pdm 文件中有伪表,所以我们需要修改生成的建表文件,修改如...

10720
来自专栏高性能服务器开发

windows完成端口(六)

系列目录 windows完成端口(一) windows完成端口(二) windows完成端口(三) windows完成端口(四) windows完成端口(五) ...

36940

扫码关注云+社区

领取腾讯云代金券