Windows 事件初探

今天学了Win32 汇编当中的事件.就跟着例子写了个Win32的小程序.把代码记下来.做为留念.

 

#include "counter.h"

#include "resource.h"

static BYTE dwOptionPause=0; //标志位,是否暂停.1 非暂停.
static BYTE dwOptionStop=1; //非开始.

static int i=1;
HWND hWndDlg;
HANDLE hEvent;
HANDLE hThread;
DWORD WINAPI counter(LPVOID lParam)
{
 while (i)
 {
  SetDlgItemInt(hWndDlg,IDC_EDIT1,i,true);
  i++;
  WaitForSingleObject(hEvent,INFINITE);
 }


 return 0;
}
INT_PTR CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam ,LPARAM lParam)
{

 switch(uMsg)
 {
 case WM_COMMAND:
  {
    switch (LOWORD(wParam))
    {
    case IDOK:
     {
      if (dwOptionStop)
      {
       SetEvent(hEvent);//设置为有信号状态.
       hThread = CreateThread(NULL,0,counter,NULL,0,NULL);//创建线程.
       EnableWindow(GetDlgItem(hWndDlg,IDCANCEL),true);
       SetDlgItemText(hWnd,IDOK,_T("停止"));
       dwOptionStop=0;
      }
      else
      {
       SetDlgItemText(hWnd,IDOK,_T("计数"));
       EnableWindow(GetDlgItem(hWndDlg,IDCANCEL),false);//禁用.
       CloseHandle(hThread);
       ResetEvent(hEvent);
       dwOptionStop=1;
      }

     }
     break;
    case IDCANCEL:
     {

      if (dwOptionPause)//处于暂停状态.
      {
       SetEvent(hEvent);//置为有信号状态.
       dwOptionPause =0;
      }
      else
      {
       ResetEvent(hEvent);//置为无信号状态.
       dwOptionPause=1;
      }
     }
     break;
    default:
     return DefWindowProc(hWnd,uMsg,wParam,lParam);
    }


  }
  break;
 case WM_INITDIALOG:
  {
   hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);//创建事件对象.
   EnableWindow(GetDlgItem(hWnd,IDCANCEL),false);
   hWndDlg = hWnd;
  }
  break;
 default:
  DefWindowProc(hWnd,uMsg,wParam,lParam);
 }
return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{

 LPCWSTR lpTemplate = MAKEINTRESOURCE(IDD_DIALOG_MAIN);
 return DialogBoxParam(hInstance,lpTemplate,NULL,WindowProc,NULL);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值