请问在手动创建的窗口里面,如何接受其他程序发给它的自定义消息?

netyou 2004-11-01 08:03:16
请问在手动创建的窗口里面,如何接受其他程序发给它的自定义消息?如何书写代码?代码该写在那里?
例子如下:
(所有应用到的函数事先已经定义申明)

static LRESULT WINAPI g_windowproc(HWND wnd,UINT msg,WPARAM wp,LPARAM lp) {
switch (msg) {
//自定义消息是不是加到这里?
case WM_CREATE:
{
assert (g_wnd == NULL);

// Store the window handle for use by other functions.
g_wnd = wnd;

// If "Remember window positions is enabled, this will
// restore the last position of our window. Otherwise it
// won't do anything.
apply_window_placement(cfg_window_placement, wnd);
}
break;

case WM_DESTROY:
{
// If "Remember window positions is enabled, this will
// save the current position of our window. Otherwise it
// won't do anything.
read_window_placement(cfg_window_placement, wnd);

// Remove our window handle from the global variable.
g_wnd = NULL;
}
break;

case WM_CLOSE:
{
// Hide and disable the window.
g_hide_window();
}
break;

case WM_KEYDOWN:
switch (wp) {

case VK_ESCAPE:
{
// Hide and disable the window.
g_hide_window();
}
break;
}
break;

case WM_PAINT:
{
PAINTSTRUCT ps;
BeginPaint(wnd, &ps);

// We will only paint out client area in white for now.
FillRect(ps.hdc, &ps.rcPaint, (HBRUSH)GetStockObject(WHITE_BRUSH));

EndPaint(wnd, &ps);
}
break;

default:
return uDefWindowProc(wnd,msg,wp,lp);
}
return 0;
}

static void g_show_window() {
static bool registered = false;
static const char * TUTORIAL1_WINDOW_CLASS = "fb2k tutorial 1 class";

if (!registered) {
uWNDCLASS wc;
memset(&wc,0,sizeof(wc));
wc.style = CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
wc.lpfnWndProc = g_windowproc;
wc.hInstance = core_api::get_my_instance();
wc.hCursor = uLoadCursor(0,IDC_ARROW);
wc.hbrBackground = 0;
wc.lpszClassName = TUTORIAL1_WINDOW_CLASS;
registered = uRegisterClass(&wc) != 0;
}

if (!g_wnd && registered) {
uCreateWindowEx(
WS_EX_TOOLWINDOW,
TUTORIAL1_WINDOW_CLASS,
TUTORIAL " " SUPERLYRICS,
WS_POPUP|WS_THICKFRAME|WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT,
200, 200,
core_api::get_main_window(),
/* no menu */ 0,
core_api::get_my_instance(),
/* no parameter */ 0 );
cfg_enabled = g_wnd != NULL;
}
}

希望各位大侠高手出招,先谢了!
...全文
109 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
netyou 2004-11-01
  • 打赏
  • 举报
回复
谢谢二位
property1 2004-11-01
  • 打赏
  • 举报
回复
#define WM_MYMSG WM_USER+300 // 要接收的消息 不一定是 WM_USER+300

static LRESULT WINAPI g_windowproc(HWND wnd,UINT msg,WPARAM wp,LPARAM lp) {
switch (msg)
{
...
case WM_USER+300:
// Your code
break ;
...
}
}
yszmax 2004-11-01
  • 打赏
  • 举报
回复
放在你标记的那里就可以了,但是必须保证自定义消息在两个不同的程序里是同一个值,比如都是
WM_APP+1。
netyou 2004-11-01
  • 打赏
  • 举报
回复
如果我在另外一个程序使用sendmessagetimeout发一条消息给上面代码的程序,然后上面的程序返回一个值,那我该如何在上面的程序里面写这个消息程序,然后返回一个值啊?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧