首页
社区
课程
招聘
[求助]典型的窗口实例我也遇到问题.
发表于: 2007-12-28 20:25 3863

[求助]典型的窗口实例我也遇到问题.

2007-12-28 20:25
3863
#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
        WNDCLASS wndcls;
        wndcls.cbClsExtra=0;
        wndcls.cbWndExtra=0;
        wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
        wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
        wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
        wndcls.hInstance=hInstance;
        wndcls.lpfnWndProc=WinSunProc;
        wndcls.lpszClassName="sunxin2006";
        wndcls.lpszMenuName=NULL;
        wndcls.style=CS_HREDRAW | CS_VREDRAW;
        RegisterClass(&wndcls);

        HWND hwnd;
        hwnd=CreateWindow("sunxin2006","ee1K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4#2L8Y4S2A6L8W2)9J5k6h3!0J5k6H3`.`.",WS_OVERLAPPEDWINDOW,
                0,0,600,400,NULL,NULL,hInstance,NULL);

        ShowWindow(hwnd,SW_SHOWNORMAL);
        UpdateWindow(hwnd);

        MSG msg;
        while(GetMessage(&msg,NULL,0,0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        return msg.wParam;
}

LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
        switch(uMsg)
        {
        case WM_CHAR:
                char szChar[20];
                sprintf(szChar,"char code is %d",wParam);
                MessageBox(hwnd,szChar,"char",0);
                break;
        case WM_LBUTTONDOWN:
                MessageBox(hwnd,"mouse clicked","message",0);
                HDC hdc;
                hdc=GetDC(hwnd);
                TextOut(hdc,0,50,"程序员之家",strlen("程序员之家"));
                //ReleaseDC(hwnd,hdc);
                break;
        case WM_PAINT:
                HDC hDC;
                PAINTSTRUCT ps;
                hDC=BeginPaint(hwnd,&ps);
                TextOut(hDC,0,0,"1d5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4#2L8Y4S2A6L8W2)9J5k6h3!0J5k6H3`.`.",strlen("b1cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4#2L8Y4S2A6L8W2)9J5k6h3!0J5k6H3`.`."));
                EndPaint(hwnd,&ps);
                break;
        case WM_CLOSE:
                if(IDYES==MessageBox(hwnd,"是否真的结束?","message",MB_YESNO))
                {
                        DestroyWindow(hwnd);
                }
                break;
        case WM_DESTROY:
                PostQuitMessage(0);
                break;
        default:
                return DefWindowProc(hwnd,uMsg,wParam,lParam);
        }
        return 0;
}

弱弱的问一句大家,在获取消息的循环后,return msg.wParam;是什么意思?我试了改成return 0;也是正确的.我就纳闷了为什么要return返回消息的参数一???
在此例子中具体起到了什么作用呀.
有请大虾不惜赐教!希望得到详细点的回答

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 198
活跃值: (288)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
2
没什么作用。只不过函数需要有一个返回值罢了
2007-12-29 00:43
0
雪    币: 321
活跃值: (275)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
3
呵呵,这个返回值,你随便写,是什么都行。
2007-12-29 14:08
0
雪    币: 424
活跃值: (2489)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
return msg.wParam;
中的msg.wParam就是PostQuitMessage()的参数,如果你在不同的地方以不同的参数多次调用了PostQuitMessage()的话,并且你又想在程序退出后好让其它程序检查这个参数的话,那就用
return msg.wParam;
来结束WinMain。不想检查的就直接return 0;咯
PostQuitMessage(5)其实就等于SendMessage(hWnd, WM_QUIT, 5, 0),最后的msg.wParam就是这里的5咯
2007-12-29 14:21
0
雪    币: 108
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
PostQuitMessage不是用来摧毁窗口后的退出消息循环用途的吗?调用它能干些什么?

return msg.wParam这个消息中的参数是返回到哪里去的??存在内存中吗?
2007-12-30 01:31
0
游客
登录 | 注册 方可回帖
返回