鱼C论坛

 找回密码
 立即注册
查看: 3781|回复: 13

不让默认函数处理WM_SYSCOMMAND消息,为什么就不支持窗口拖拽呢?

[复制链接]
发表于 2014-10-15 16:12:17 | 显示全部楼层 |阅读模式
50鱼币
  1. #include <Windows.h>
  2. HINSTANCE g_hInstance;
  3. HWND      g_hButton;

  4. void OnCreate(HWND hWnd,
  5.     UINT uMsg,
  6.     WPARAM wParam,
  7.     LPARAM lParam)
  8. {

  9.     LPCREATESTRUCT ps = LPCREATESTRUCT(lParam);
  10.     //MessageBox(hWnd,ps->lpszName,TEXT(""),MB_OK);
  11.     g_hButton = CreateWindowEx(0,TEXT("BUTTON"),TEXT("BUTTON"),WS_CHILD|WS_VISIBLE,
  12.         0,0,100,100,hWnd,HMENU(1001),g_hInstance,NULL);
  13. }

  14. void OnSize(HWND hWnd,
  15.     UINT uMsg,
  16.     WPARAM wParam,
  17.     LPARAM lParam)
  18. {
  19.     int nWidth  = LOWORD(lParam);
  20.     int nHeight = HIWORD(lParam);

  21.     int nX = (nWidth - 100)  / 2;
  22.     int nY = (nHeight - 100) / 2;
  23.     MoveWindow(g_hButton,nX,nY,100,100,TRUE);

  24. }

  25. bool OnSysCommand(HWND hWnd,
  26.     UINT uMsg,
  27.     WPARAM wParam,
  28.     LPARAM lParam)
  29. {
  30.     switch (wParam)
  31.     {
  32.     case SC_CLOSE:
  33.         if (IDOK == MessageBox(NULL, TEXT("是否要退出程序?"), TEXT("提示"), MB_OKCANCEL | MB_ICONWARNING))
  34.         {
  35.             return true;
  36.         }
  37.     }
  38.     return false;
  39. }

  40. void OnCommand(HWND hWnd,
  41.     UINT uMsg,
  42.     WPARAM wParam,
  43.     LPARAM lParam)
  44. {
  45.     switch (wParam)
  46.     {
  47.     case 1001:
  48.         if (IDOK == MessageBox(NULL, TEXT("是否退出程序"), TEXT("提示"), MB_OKCANCEL | MB_ICONWARNING))
  49.         {
  50.             SendMessage(hWnd, WM_CLOSE, 0, 0);
  51.         }
  52.         break;
  53.     }
  54. }

  55. LRESULT CALLBACK WndProc(HWND hWnd,
  56.     UINT uMsg,
  57.     WPARAM wParam,
  58.     LPARAM lParam)
  59. {
  60.     switch (uMsg)
  61.     {
  62.     case WM_CREATE:
  63.         OnCreate(hWnd,uMsg,wParam,lParam);
  64.         break;
  65.     case WM_SIZE:
  66.         OnSize(hWnd, uMsg, wParam, lParam);
  67.         break;
  68.     case WM_SYSCOMMAND:
  69.         if (true == OnSysCommand(hWnd, uMsg, wParam, lParam))
  70.         {
  71.             break;
  72.         }
  73.         else
  74.         {
  75.             return 0;
  76.         };     
  77.         //为什么加上这个消息,就不支持窗口拖拽?
  78.         //是因为无法处理最大化、最小化窗口,也无法处理拖拽了吗?
  79.     case WM_COMMAND:
  80.         OnCommand(hWnd,uMsg,wParam,lParam);
  81.         break;
  82.     case WM_DESTROY:
  83.         PostQuitMessage(0);
  84.         return 0;
  85.     }
  86.     return DefWindowProc(hWnd, uMsg, wParam, lParam);
  87. }

  88. void RegisterWnd(LPCTSTR lpClassName)
  89. {
  90.     WNDCLASSEX wce;
  91.     wce.style = CS_HREDRAW | CS_VREDRAW;
  92.     wce.lpfnWndProc = WndProc;
  93.     wce.cbSize = sizeof(WNDCLASSEX);
  94.     wce.cbClsExtra = 0;
  95.     wce.cbWndExtra = 0;
  96.     wce.hInstance = g_hInstance;
  97.     wce.hIcon = 0;
  98.     wce.hCursor = 0;
  99.     wce.hIconSm = 0;
  100.     wce.hbrBackground = HBRUSH(COLOR_BTNFACE);
  101.     wce.lpszClassName = lpClassName;
  102.     wce.lpszMenuName = 0;
  103.     if (!RegisterClassEx(&wce))
  104.     {
  105.         MessageBox(NULL, TEXT("注册失败"), TEXT("提示"), MB_OK);
  106.     }

  107. }

  108. HWND CreateWnd(LPCTSTR lpClassName)
  109. {
  110.     HWND hWnd = CreateWindowEx(0, lpClassName, L"HELLO",
  111.         WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
  112.         CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInstance, NULL);
  113.     return hWnd;
  114. }

  115. void DisplayWnd(HWND hWnd)
  116. {
  117.     ShowWindow(hWnd, SW_SHOW);
  118.     UpdateWindow(hWnd);
  119. }

  120. void Message()
  121. {
  122.     MSG msg;
  123.     while (GetMessage(&msg, NULL, 0, 0))
  124.     {
  125.         TranslateMessage(&msg);
  126.         DispatchMessage(&msg);
  127.     }
  128. }

  129. int WINAPI WinMain(HINSTANCE hInstance,
  130.     HINSTANCE hPrevInstance,
  131.     LPSTR     lpCmdLine,
  132.     int       nCmdShow)
  133. {
  134.     g_hInstance = hInstance;
  135.     RegisterWnd(L"hello");
  136.     HWND hWnd = CreateWnd(L"hello");
  137.     DisplayWnd(hWnd);
  138.     Message();
  139.     return 0;
  140. }
复制代码

最佳答案

查看完整内容

是因为SC_MOVE没被默认处理,所以就不允许窗口移动了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-10-15 16:12:18 | 显示全部楼层
是因为SC_MOVE没被默认处理,所以就不允许窗口移动了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-10-15 19:36:28 | 显示全部楼层
把 return 0; 改为 return DefWindowProc(hWnd, uMsg, wParam, lParam);
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-10-16 17:35:58 | 显示全部楼层
楼主学c++?

开始以为是学易语言的 后来以为学Delphi  现在觉得是学c++  ,或许全都都会吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-16 17:54:51 | 显示全部楼层
qq351317878 发表于 2014-10-16 17:35
楼主学c++?

开始以为是学易语言的 后来以为学Delphi  现在觉得是学c++  ,或许全都都会吧

是C呀,不是C++哦~ 易语言和delphi太难啦,C++更难~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-10-16 18:28:54 | 显示全部楼层
拈花小仙 发表于 2014-10-16 17:54
是C呀,不是C++哦~ 易语言和delphi太难啦,C++更难~

居然觉得易语言 和Delphi 难  ,只能说 你长了个c 逻辑的大脑   

表示佩服
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-16 19:58:35 | 显示全部楼层
qq351317878 发表于 2014-10-16 18:28
居然觉得易语言 和Delphi 难  ,只能说 你长了个c 逻辑的大脑   

表示佩服

本来就是难嘛,我C学的不好,但是用C基础就行呀,易语言是面向对像的,能不难嘛?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-10-16 20:16:11 | 显示全部楼层
拈花小仙 发表于 2014-10-16 19:58
本来就是难嘛,我C学的不好,但是用C基础就行呀,易语言是面向对像的,能不难嘛?

其实我对面对对象和面对过程都不太了解    所以目前还是菜鸟
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-16 20:20:26 | 显示全部楼层
qq351317878 发表于 2014-10-16 20:16
其实我对面对对象和面对过程都不太了解    所以目前还是菜鸟

你是学什么的呀?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-10-16 20:27:09 | 显示全部楼层

Delphi    觉得比较简单  开发速度快  。功能也很强大  需要的功能都能满足
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-16 20:28:01 | 显示全部楼层
qq351317878 发表于 2014-10-16 20:27
Delphi    觉得比较简单  开发速度快  。功能也很强大  需要的功能都能满足

不懂哦,看上去很难
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-10-16 20:32:29 | 显示全部楼层
拈花小仙 发表于 2014-10-16 20:28
不懂哦,看上去很难

小甲鱼讲得好,很通俗易懂
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-16 20:56:43 | 显示全部楼层
qq351317878 发表于 2014-10-16 20:32
小甲鱼讲得好,很通俗易懂

我比较笨,只会C
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-8-26 08:15:20 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-7 03:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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