游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2763|回复: 6

求助:关于VC++里面的消息映射

[复制链接]

3

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2008-3-19 20:10:00 | 显示全部楼层 |阅读模式
大家都知道在MFC里的消息映射很好做,自动生成的也就
BEGIN_MESSAGE_MAP( CMyWindow, CFrameWnd )
   //{{AFX_MSG_MAP( CMyWindow )
    ON_WM_PAINT()
    ON_COMMAND( IDM_ABOUT, OnAbout )
   //}}AFX_MSG_MAP
END_MESSAGE_MAP( )
这么一点

但我现在在用API写一个程序的时候,如果要响应类似WM_CLIENT_READ这样一类的消息
我该怎么做消息映射呢?

[em7] [em7]

1

主题

177

帖子

198

积分

注册会员

Rank: 2

积分
198
QQ
发表于 2008-3-19 20:33:00 | 显示全部楼层

Re:求助:关于VC++里面的消息映射

用户自定义消息。建议去研究一下《深入浅出MFC》。结合MFC的源代码,应该可以搞懂点。看个几遍可能就会开窍的。最近发现WPF不错,虽然只是封闭DirectX,有些地方还只能用GDI+,比如Font等。但很有前途。可惜都是些托管代码,不能直接管理底层,不爽。

3

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2008-3-19 21:53:00 | 显示全部楼层

Re:求助:关于VC++里面的消息映射

我就是不想用MFC,就是想用API写,有什么办法吗?

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-3-20 08:49:00 | 显示全部楼层

Re:求助:关于VC++里面的消息映射

WPF以后没准会用在游戏的开发工具上,比如地图编辑器之类的。
C++的话,做游戏直接用API还好,不过做普通窗口程序就太麻烦了,可以试试WTL,或者QT,或者wxWidgets

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2008-3-30 13:29:00 | 显示全部楼层

Re:求助:关于VC++里面的消息映射

WTL 好一点,毕竟是纯C++的实现,都有源代码,编译出来程序也不大。

20

主题

136

帖子

172

积分

注册会员

Rank: 2

积分
172
发表于 2008-4-1 12:55:00 | 显示全部楼层

Re:求助:关于VC++里面的消息映射

/********************************************************************
  created:  2008/03/31
  created:  31:3:2008   13:34
  filename:   k:\备份\开发资源\解决方案\LoserPower\WaitableTimer\WaitableTimer.cpp
  file path:  k:\备份\开发资源\解决方案\LoserPower\WaitableTimer
  file base:  WaitableTimer
  file ext:  cpp
  author:    Loserwang
  
  purpose:  
*********************************************************************/

#define _WIN32_WINNT 0x0501

#include ".\\..\\LoserPower\\losHeaders.h"
#include "resource.h"

using namespace los::types;
using namespace los::stringtypes;
using namespace los::framework;
using namespace los::controls;
using namespace los::mathtools;
using namespace los::multithreading;
using namespace los::systeminformation;

HANDLE hWait;

class WaitThread : public Thread<Window>
{
public:
  InheritClass(WaitThread);

  virtual ulong Run(pointer pWnd)
  {
    bExit = false;
    while (!bExit)
    {
      ::WaitForSingleObject(hWait, INFINITE);
      DateTime dt;
      app->GetWindow(pWnd->GetDlgItem(IDC_EDIT7))->text = dt.ToString();
    }
    return 0;
  }

  bool bExit;
};

class WTDialog : public Dialog
{
public:
  InheritClass(WTDialog);

  WTDialog()
    : Dialog(IDD_DIALOG1)
    , edt1(IDC_EDIT1)
    , edt2(IDC_EDIT2)
    , edt3(IDC_EDIT3)
    , edt4(IDC_EDIT4)
    , edt5(IDC_EDIT5)
    , edt6(IDC_EDIT6)
    , edt7(IDC_EDIT7)
    , btn1(IDC_BUTTON1)
    , btnOk(IDOK)
  {}

protected:
  virtual void MessageMap()
  {
    Base::MessageMap();
    Invoke(wm_initdialog, OnInitDialog);
    Invoke(btn1.clicked(), OnBtn1);
    Invoke(btnOk.clicked(), OnOk);
  }

private:
  LRESULT OnInitDialog(Window& def_focus, void* data)
  {
    CenterWindow();

    los::controls::Color clr;

    InitControls(this, &edt1, &edt2, &edt3, &edt4, &edt5, &edt6, &edt6, &edt7, &btn1, &btnOk, 0);
    edt5.text = t("Y-M-D h:m:s");
    edt6.text = t("Y年M月D日 h时m分s秒");

    DateTime dt(DateTime::dtUTC);
    hWait = CreateWaitableTimer(0, false, t("6436E6AE-8207-4c92-B532-5FC6EE8EF4F9"));
    SetWaitableTimer(hWait, &dt.ToLargeInteger(), 1000, 0, 0, false);

    thrd.param_ptr = this;
    thrd.CreateThread();

    return Base:roc();
  }

  LRESULT OnBtn1()
  {
    if (edt1.text == t(""))
    {
      MessageBox(t("请输入日期/时间字符串"));
      return 0;
    }
  
    DateTime dt(edt1.text, DateTime::dtLocal, edt5.text);
    edt2.text = dt.ToString(edt6.text);

    stringstream ss;
    ss << dt.ToInt64();
    edt3.text = ss.str();
    ss.str(t(""));

    dt.ConvertToUTC();

    edt4.text = dt.ToString(edt6.text);

    return 0;
  }

  LRESULT OnOk()
  {
    ::CloseHandle(hWait);
    Close(idOk);
    return 0;
  }

private:
  Edit edt1, edt2, edt3, edt4, edt5, edt6, edt7;
  Button btn1, btnOk;
  WaitThread thrd;
};

INT WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, INT)
{
  WTDialog* pDlg = new WTDialog;
  pDlg->Create(0);
  pDlg->ShowWindow();
  pDlg->UpdateWindow();
  app->Initialize(pDlg);
  return app->Run(0);
}

3

主题

35

帖子

131

积分

注册会员

Rank: 2

积分
131
QQ
发表于 2008-7-8 09:18:00 | 显示全部楼层

Re:求助:关于VC++里面的消息映射

楼上的应该把核心代码给出来。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 01:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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