消息处理程序 INT_PTR 返回值的目的是什么?

Roo*_*kie 2 c++ winapi visual-studio-2008 visual-c++

我在玩visual studio的windows窗体,示例代码是这样的:

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    /*code cut*/
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;
    break;
Run Code Online (Sandbox Code Playgroud)

虽然我的其他处理程序函数如下所示:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    /*code cut*/
    return 0; // no magical casting or anything, just plain int
Run Code Online (Sandbox Code Playgroud)

我有一个线索,在 WndProc() 中,当我执行 areturn 0;这意味着消息不会被默认消息处理程序处理?但是如果你这样做,return 1;它会用默认处理程序处理吗?

但重点是return (INT_PTR)TRUE;什么?在那里使用普通return 0;样式是否安全?我尝试编译,它也只适用于普通整数值。

另外,我不确定什么时候应该使用哪个值,示例代码有这个:

EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
Run Code Online (Sandbox Code Playgroud)

但是return (INT_PTR)TRUE;那里有什么意义呢?我将其更改为FALSE但在功能上看不出任何差异。

所以,我不确定这是在做什么,任何人都可以清除我的想法,我什么时候应该使用return 1,什么时候应该使用return 0,以及我应该什么时候使用其他东西(如果我应该的话)?

ild*_*arn 5

第一段代码是一个 DialogProc——引用相关文档

返回值
类型:INT_PTR
通常,对话框过程TRUE在处理消息时应返回,否则应返回FALSE。如果对话框过程返回FALSE,则对话框管理器执行默认对话框操作以响应消息。

第二段代码是 WindowProc - 引用相关文档

返回值
类型:LRESULT
返回值是消息处理的结果,取决于发送的消息。

因此,该/*code cut*/部分至关重要,因为您想要的返回值完全取决于正在处理的消息。