windows java 调用bat脚本_消息队列

windows java 调用bat脚本_句柄_02

 

数据类型

windows java 调用bat脚本_消息队列_03

API 第一个接触到的函数就是:

int WINAPI WinMain(
  HINSTANCE hInstance,      // 句柄
 
  HINSTANCE hPrevInstance,  // 总是置空
 
  LPSTR lpCmdLine,          //命令行
 
  int nCmdShow
 
);


windows java 调用bat脚本_子窗口_04

 

 这是个入门的函数,就像C++中的main函数,没有main函数就没法运行

 

 第二个接触到的函数:

windows java 调用bat脚本_句柄_05

 这是一个弹出的消息窗口

windows java 调用bat脚本_子窗口_06

 

 UINT uType :按钮的样式类型

MB_OK :确定按钮

MB_OKCANCEL:确定和取消的按钮

MB_YESNO:是和否的按钮

MB_INFORMATION:信息提示的图标

MB_WARNING:警告图标

MB_ERROR:错误标示

每个按钮也可以进行同时使用

 

第三个接触到的函数(重要的部分-注册窗口类):

ATOM RegisterClass( CONST WNDCLASS *lpWndClass // class data );


这里的是检查你注册的窗口,如果注册失败,则返回0,注册成功,返回非0值。


ATOM 是16进制整数,且是唯一性(整个系统中是唯一的)。


这里面所使用的参数类型 是 WNDCLASS

typedef struct _WNDCLASS {     UINT       style;  //窗体的风格
 
WNDPROC    lpfnWndProc; //窗口过程函数,定义了在用户在窗体中实现的功能,比如说点击,移动等    int        cbClsExtra;//调用RegisterClass,注册窗口时系统就会按照此尺寸开辟一块内存     int        cbWndExtra;// 调用CreateClass.创建窗口时系统会找次尺寸开辟空间    HINSTANCE  hInstance; //实例句柄-WinMain参数中的句柄    HICON      hIcon; //图标句柄    HCURSOR    hCursor;//鼠标句柄     HBRUSH     hbrBackground; //背景句柄    LPCTSTR    lpszMenuName;/*
 
一个以null结尾的字符串指针,指定了资源类名菜单,正如它的名字出现在资源文件。如果你用一个整数来识别菜单,使用MAKEINTRESOURCE宏。如果这个成员是NULL,windows属于这个类没有默认的菜单。 
*/     LPCTSTR    lpszClassName;//窗体的名字 } WNDCLASS, *PWNDCLASS;


 

第四个接触到的函数(重要的部分-创建窗口类):

HWND CreateWindow(  LPCTSTR lpClassName,  // 窗口类名,与wndclass中的lpszClassName必须一致<-这是重点
  LPCTSTR lpWindowName, // 第二个参数:窗体标题
  DWORD dwStyle,        // 第三个参数:窗体样式
  int x,                //窗体的位置 X
 
int y,                //窗体的位置 y
 
  int nWidth,           //窗体的大小 宽 
 
  int nHeight,         //窗体的大小 高
 
  HWND hWndParent,      // 处理到父窗口或所有者的窗口被创建。创建子窗口或一个附属窗口,提供一个有效的窗口句柄。该参数是可选的弹出窗口。
  HMENU hMenu,          /*菜单句柄,或指定子窗口标识符根据窗口样式。                          对于一个重叠或弹出窗口,菜单句柄标识用于与窗口;它可以是NULL如果类菜单使用。
                          为子窗口,指定子窗口句柄标识符,一个整数值使用对话框控制通知其父母谈论事件。
                          应用程序决定了子窗口标识符,它必须是唯一的所有子窗口的父窗口一样。*/
  HINSTANCE hInstance,  // 句柄->WinMain的参数
  LPVOID lpParam
 
);


第五/六个接触到的函数(显示窗体,更新窗体):  //显示窗口  ShowWindow(hwnd,SW_FORCEMINIMIZE);  //更新窗体->发送一个WM_PAINT  UpdateWindow(hwnd);


 


第七个接触到的函数(消息队列的循环):

MSG msg; /*
 GetMessage
 此函数从调用线程的消息队列中取出一个消息。
 此函数发送消息队列的消息直到这个消息适合检索。然后把检索到的消息赋值给MSG结构体。
 第一个参数:带入一个msg
 第二个参数:需要检索消息的窗体句柄。这个窗体必须属于调用线程,下面是指定的值
 NULL:GetMessage检索任何属于调用线程窗体的消息,并且通过PostThreadMessage函数发送消息到调用线程
 第三个参数:指定被检索的最小消息值的整数
 第四个参数:指定被检索的最大消息值的整数

 
/
*/   TranslateMessage(&msg);  
   DispatchMessage(&msg);  
  }  
 } 

 


第八个接触到的函数(回调函数):

LRESULT CALLBACK WndProc( HWND hwnd,      // handle to window
 UINT uMsg,      // message identifier
 WPARAM wParam,  // first message parameter
 LPARAM lParam   // second message parameter
 )
{ 
 HDC hdc;
 PAINTSTRUCT ps;
 RECT rect;

 switch(uMsg)
 { //当有外设信息被传到窗体时
 case WM_CREATE: 
 
 <-#pragma  comment(lib,"WinMM.Lib") 需要使用到这个库    return 0; 
  }
  // 绘制窗口.
 case WM_PAINT: 
  hdc = BeginPaint(hwnd,&ps);
  GetClientRect(hwnd,&rect);
  DrawText(hdc,"HELLO,这是我的第一个windows程序,真不容易啊!",-1,&rect,DT_BOTTOM);
  EndPaint(hwnd,&ps);
  return 0; 
 /*
 被创建之后的消息发送到一个窗口大小后改变了。  一个窗口接收这个消息通过其WindowProc函数。
 */
 case WM_SIZE: 
  MessageBox(NULL,"窗体被改变","窗体改变",MB_OK);
  return 0; 
  // 关闭窗口. 
 case WM_DESTROY: 
  PostQuitMessage(0);
  return 0; 
 case WM_RBUTTONDOWN:
  {  //左键
   int a = MessageBox(NULL,"左键","魂淡,你按了左键",MB_YESNO);
   
   CHAR c[256] = {0};
   sprintf_s(c,"%d",a);  <- #include <stdio.h>

 


 


虽然这里看上去只是用了8个函数,但实际上动用了18个函数:


windows java 调用bat脚本_消息队列_07

 

关于参数类别:

 

windows java 调用bat脚本_句柄_08

windows java 调用bat脚本_句柄_09

 

变量的一些命名规则:

windows java 调用bat脚本_子窗口_10

 

结构 和 标示符 :

windows java 调用bat脚本_子窗口_11

windows java 调用bat脚本_消息队列_12