鱼C论坛

 找回密码
 立即注册
查看: 6191|回复: 21

[技术交流] 窗口!窗口!甲鱼大神句句是经典的

[复制链接]
发表于 2015-3-30 14:18:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <Windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
                             //应用程序实例句柄
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{                           
        static TCHAR szAppName[]=TEXT("MyWindows"); //创建窗口基于什么类 如:男人女人
        HWND hwnd;
    MSG msg;
        WNDCLASS wndclass;// 这个是 类的基本属性------
        wndclass.style=CS_VREDRAW | CS_HREDRAW;
        wndclass.lpfnWndProc=WndProc;//   ??//告诉操作系统--------
        wndclass.cbClsExtra=0;  
        wndclass.cbWndExtra=0;
        wndclass.hInstance=hInstance;      // 应用程序实例句柄
        wndclass.hIcon=LoadIcon(NULL, IDI_APPLICATION);//??图标
        wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);// 光标箭头
        wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);// 画刷
        wndclass.lpszMenuName=NULL; // 程序菜单目前没有
        wndclass.lpszClassName=szAppName;// 随便命名;//创建窗口基于什么类
   // 已添完资料开始注册;
        if(!RegisterClass(&wndclass) ) // 注册函数->指针WNDCLASS结构
        {
          MessageBox(NULL,TEXT("这个程序需要在window NT 才能执行"),
                  szAppName,MB_ICONERROR|MB_OK);
          return 0;

        }
//----------------进一步为窗口类 添加属性(窗口实例)-----------窗口创建成功GreateWindow-----------
        hwnd=CreateWindow(szAppName,TEXT("福建厦门"),//创建窗口基于什么类
    WS_OVERLAPPEDWINDOW,//窗口风格|格式   // 窗口边框 有滚动条的修改地方
        CW_USEDEFAULT,//初始x 坐标
        CW_USEDEFAULT,//    y
        CW_USEDEFAULT,//初始x方向尺寸
        CW_USEDEFAULT,//    Y
        NULL,       // 父窗口句柄
        NULL,       // 窗口菜单句柄
        hInstance, // 程序实例句柄
        NULL);    // 创建参数
        // 返回值一个新的窗口句柄 在 ----hwnd --就抓hwnd句柄控制他--------------
        // 完成后 告诉ShowWindow--展示窗口,在于第一次 调用 WinMain函数 nCmdShow做参数
        //在随便调用ShoWindow,必须使用下来显示中一个给定值,而不WinMain函数参数的值
         ShowWindow(hwnd,iCmdShow);// 显示
         UpdateWindow(hwnd);// 更新窗口

         //-----------消息循环--------------------------------------

         // 此函数GetMessage有返回值很多看 window 常用消息API文档 小甲鱼。
         while(GetMessage(&msg,NULL,0,0))//解释窗口消息句柄MSG这是个结构:把结构里所有的属性
         {                              //传达给句柄指针&MSG->投放各自消息队列里。
           TranslateMessage(&msg);//虚拟键消息转-字符消息-送当前线程消息队列,下次线程调用GetMessage被读出
           DispatchMessage(&msg);//分派一个消息给窗口过程(回调函数)该消息从GetMessage获得 Window控制权在改函数交给应用程序
            // 带着消息找--操作系统--调用-Wndproc-函数
         } // 次函数while(0)=退解释进程。MB_QUIT.                                 交给操作系统CALLBACK WndProc->回调函数
          //DispatchMessage(&msg)带着消息找---操作系统--调用-Wndproc-函数  ------重点
         return  msg.wParam;
}
// -------以下函数跟 GetMessage 是在循环 等消息---直到接到MB_QUIT消息退出循环----

//消息机制:队列化--非队列化:
//队列化:放到队列消息里,
//非队列化:立即送往窗口过程,绕过系统和线程消息队列 例如:UpdateWindow(hwnd)

         LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
         {
                          // PAINTSTRUCT 用来存放绘制窗口需要的信息-参数--当BeginPaint函数调用它时 系统自动填充完成
          PAINTSTRUCT ps; //窗口过程对客户区进行绘制的信息参数=一个结构成员rect,设备环境句柄hdc其他先不管
           HDC hdc;     // 用于绘制设备环境句柄
          RECT rect; //指定左上角,右下角坐标确定一个要绘制的矩形范围
          //-----------------------------客户区范围-----------------------------------
         switch(message)
         {
                 
                 
                 
                 
          // 只要窗口重绘,盖住,移动就会产生WM_PAINT消息=操作系统就会发送WM_PAINT消息到应用程序消息队列里         
         case WM_PAINT:            //一个PAINTSTRUCT结构中:参数:重新绘制的窗口句柄,指向PAINTSTRUCT结构指针,用于存放绘画信息
            //BeginPaint 函数返回一个绘画设备环境句柄****HDC*****
         hdc=BeginPaint(hwnd,&ps);//指定窗口进行绘画工作的准备,将绘画有关的信息填充到
           //BeginPaint函数(是绘画初始化)->需要重绘窗口句柄,包含PAINTSTRUCT 结构指针,
          GetClientRect(hwnd,&rect); //获取绘制好的窗口坐标,句柄,指向一个RECT的指针(客户信息)

        //  有了BeginPaint还需要字符串往放--所以有GetClientRect函数:获的客户区位置坐标信息也需要rect结构信息->
           //  然后调用 DrawText 函数 来绘制->规范**调整最后一个参数的标志的组合->来定制显示的具体形式-
         
          DrawText(hdc,TEXT("大家好"),// DrawText==打印消息,参数:打印方位风格。需要->获得显示设备环境句柄HDC
             //绘图都用通过rect 结构函数来完成,也包含 HDC句柄等等...
                  -1,&rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);
      //              显示一行里面   水平居中     垂直居中

          EndPaint(hwnd,&ps);  //绘制解释,和释放,返回值始终0,参数:重新绘制窗口句柄,指向PAINSTRUCT结构指针
          return 0;
                  
          case WM_LBUTTONDOWN:
                 MessageBox(hwnd,TEXT("我被按了一下!!!^_^"),TEXT("好舒服"),MB_OK);
                 return 0;


         case WM_DESTROY:       //响应窗口销毁消息:部署否保存 的提醒 然后调用 PostQuitMessage函数
                 PostQuitMessage(0);//线程终止请求:这个函数通常相应WM_DESTROY 消息
                                    // 参数:nExitCode (0)此值被用作WM_QUIT 消息的wParam参数 重要
                 return 0;          // 指定应用程序的退出代码 就是--正式工作收尾代码----------------------
         }
                           //出来鼠标消息函数交给 DefWindowPro函数
    return DefWindowProc(hwnd,message,wParam,lParam);
           // 非客户区的代码交给 DefWindowProc函数消息默认来处理,不然点击关闭按钮->关不掉.       
                   //如何处理-消息默认操作系统是怎么处理-操作系统会根据你点击非客户区的坐标来计算是哪个按钮
                   //然后来传递 最小化,最大,关闭的消息。否则会以为当做在客户区处理
         }
          

评分

参与人数 2鱼币 +15 收起 理由
康小泡 + 5 不错哇,很详细。
~风介~ + 10 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-30 15:23:51 | 显示全部楼层
不错  对新手很有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-30 18:38:52 | 显示全部楼层
  不错不错。学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-30 19:49:39 | 显示全部楼层
这个标题.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 12:02:03 | 显示全部楼层
支持一下楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 19:45:24 | 显示全部楼层
no pain no gain
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 23:36:50 | 显示全部楼层
支持,以我现在的水平还看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-1 15:34:58 | 显示全部楼层
好厉害好厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-1 18:33:28 | 显示全部楼层
:lol:看不懂,不过感觉好厉害的样子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-3 10:07:01 | 显示全部楼层
:titter:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-3 13:54:37 | 显示全部楼层
这是MFC吗

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-3 14:37:15 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-5 17:37:04 | 显示全部楼层
支持,求鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-29 17:35:18 | 显示全部楼层
支持lz
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-12 23:15:07 | 显示全部楼层
不错不错,挺好:titter:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-6-13 16:47:54 | 显示全部楼层
写得不错  学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-6-25 19:10:24 | 显示全部楼层
學習筆記!支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-7 17:14:16 | 显示全部楼层
是啊。。。小甲鱼真是牛x
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-8 15:17:31 | 显示全部楼层
小甲鱼是神人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-9 22:20:03 From FishC Mobile | 显示全部楼层
带小就不萌了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 09:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表