鱼C论坛

 找回密码
 立即注册
查看: 5318|回复: 41

[技术交流] SDK简单的登录界面制作(菜鸟作品)—— 小仙会逐步完善 请大家指点下

[复制链接]
发表于 2014-11-16 17:50:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <Windows.h>

  2. HINSTANCE g_hInstance;
  3. HWND hChild, DengLu;

  4. LRESULT CALLBACK WndProc(HWND hWnd,
  5.                          UINT uMsg,
  6.                          WPARAM wParam,
  7.                          LPARAM lParam);

  8. LRESULT CALLBACK ChildProc(HWND hWnd,
  9.                            UINT uMsg,
  10.                            WPARAM wParam,
  11.                            LPARAM lParam);

  12. void RegisterWnd(LPCTSTR lpClassName,UINT Style,WNDPROC proc)
  13. {
  14.     WNDCLASSEX wce;
  15.     wce.style = Style;
  16.     wce.lpfnWndProc = proc;
  17.     wce.cbSize = sizeof(WNDCLASSEX);
  18.     wce.cbClsExtra = 0;
  19.     wce.cbWndExtra = 0;
  20.     wce.hInstance = g_hInstance;
  21.     wce.hIcon  = 0;
  22.     wce.hCursor = 0;
  23.     wce.hIconSm = 0;
  24.     wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);
  25.     wce.lpszClassName = lpClassName;
  26.     wce.lpszMenuName = 0;
  27.     if(!RegisterClassEx(&wce))
  28.     {
  29.         MessageBox(NULL,TEXT("注册失败"),TEXT("提示"),MB_OK);
  30.     }

  31. }

  32. HWND CreateWnd(LPCTSTR lpClassName,LPCTSTR name,DWORD Style,HWND hParent)
  33. {
  34.     HWND hWnd = CreateWindowEx(0,lpClassName,name,
  35.         Style,CW_USEDEFAULT,CW_USEDEFAULT,
  36.         CW_USEDEFAULT,CW_USEDEFAULT,hParent,NULL,g_hInstance,NULL);

  37.     return hWnd;
  38. }

  39. void DisplayWnd(HWND hWnd)
  40. {
  41.     ShowWindow(hWnd,SW_SHOW);
  42.     UpdateWindow(hWnd);
  43. }

  44. void Message()
  45. {
  46.     MSG msg;
  47.     while(GetMessage(&msg,NULL,0,0))
  48.     {
  49.         TranslateMessage(&msg);
  50.         DispatchMessage(&msg);
  51.     }
  52. }

  53. int WINAPI WinMain(HINSTANCE hInstance,
  54.                    HINSTANCE hPrevInstance,
  55.                    LPSTR     lpCmdLine,
  56.                    int       nCmdShow)
  57. {
  58.     g_hInstance = hInstance;

  59.     RegisterWnd(L"denglu",CS_HREDRAW|CS_VREDRAW,WndProc);
  60.     DengLu = CreateWnd(L"denglu",TEXT("登录"),WS_OVERLAPPED|WS_SYSMENU,NULL);
  61.     MoveWindow(DengLu,600,300,280,160,TRUE);
  62.     DisplayWnd(DengLu);

  63.     RegisterWnd(L"Child",CS_HREDRAW|CS_VREDRAW,ChildProc);
  64.    
  65.     Message();

  66.     return 0;
  67. }

  68. LRESULT CALLBACK WndProc(HWND hWnd,
  69.                          UINT uMsg,
  70.                          WPARAM wParam,
  71.                          LPARAM lParam)
  72. {
  73.     switch(uMsg)
  74.     {
  75.     case WM_CREATE:
  76.         {
  77.             CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("EDIT"),TEXT("bbs.fishc.com"),
  78.                 WS_CHILD|WS_VISIBLE,40,20,200,30,hWnd,HMENU(1001),g_hInstance,NULL);

  79.             CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("BUTTON"),TEXT("登录"),
  80.                 WS_CHILD|WS_VISIBLE,40,80,200,30,hWnd,HMENU(1002),g_hInstance,NULL);

  81.             ShowWindow(hWnd,SW_SHOW);
  82.             break;
  83.         }
  84.     case WM_COMMAND:
  85.         {
  86.             switch(wParam)
  87.             {
  88.             case 1002:
  89.                 {
  90.                     hChild = CreateWnd(L"Child",TEXT("窗口风格管理"),WS_OVERLAPPED|WS_SYSMENU,DengLu);
  91.                     MoveWindow(hChild,500,300,500,300,TRUE);
  92.                     DisplayWnd(hChild);
  93.                     break;
  94.                 }
  95.              }

  96.         }
  97.         break;
  98.     case WM_DESTROY:
  99.         PostQuitMessage(0);
  100.         return 0;
  101.     }
  102.     return DefWindowProc(hWnd,uMsg,wParam,lParam);
  103. }

  104. LRESULT CALLBACK ChildProc(HWND hWnd,
  105.                            UINT uMsg,
  106.                            WPARAM wParam,
  107.                            LPARAM lParam)
  108. {
  109.     switch(uMsg)
  110.     {
  111.     case WM_CREATE:
  112.         {
  113.             ShowWindow(DengLu,SW_HIDE);
  114.         }
  115.     case WM_SYSCOMMAND:
  116.         {
  117.             switch(wParam)
  118.             {
  119.             case SC_CLOSE:
  120.                 {
  121.                     ShowWindow(DengLu,SW_SHOW);
  122.                     break;
  123.                 }
  124.             }
  125.         }
  126.         break;
  127.     }
  128.     return DefWindowProc(hWnd,uMsg,wParam,lParam);
  129. }
复制代码
回帖是一种美德,让我们拥有这种美德~
登录.jpg

评分

参与人数 13荣誉 +127 鱼币 +127 贡献 +75 收起 理由
freeparty + 10 + 10 + 10 感谢楼主无私奉献!
漠水 + 5 + 5 + 3 支持楼主!
沉思的牛 + 2 + 2 + 1 小仙小仙支持你!!
风之残月 + 5 + 5 + 5 支持楼主!
康小泡 + 5 + 5 + 5 支持楼主!
青玄 + 10 + 10 + 10 ^_^ 小仙!继续努力!
大黑鱼 + 30 + 30 + 10 不犹豫!支持
chishubiao + 5 + 5 + 5 支持楼主!
百日维新 + 30 + 30 + 10
machimilk + 2 大胆尝试,敢于面对挫折

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

 楼主| 发表于 2014-11-16 17:52:38 | 显示全部楼层

改进后....

本帖最后由 拈花小仙 于 2014-11-16 21:32 编辑
  1. #include <Windows.h>

  2. HINSTANCE g_hInstance;
  3. HWND hChild, DengLu;
  4. HWND hWndEdit;//这个变量接收编辑框的hwnd用来获取内容用的
  5. //获取内容用getwindowtext比getdlgitemtext省事

  6. LRESULT CALLBACK WndProc(HWND hWnd,
  7.                                                  UINT uMsg,
  8.                                                  WPARAM wParam,
  9.                                                  LPARAM lParam);

  10. LRESULT CALLBACK ChildProc(HWND hWnd,
  11.                                                    UINT uMsg,
  12.                                                    WPARAM wParam,
  13.                                                    LPARAM lParam);

  14. void RegisterWnd(LPCTSTR lpClassName,UINT Style,WNDPROC proc)
  15. {
  16.         WNDCLASSEX wce;
  17.         wce.style = Style;
  18.         wce.lpfnWndProc = proc;
  19.         wce.cbSize = sizeof(WNDCLASSEX);
  20.         wce.cbClsExtra = 0;
  21.         wce.cbWndExtra = 0;
  22.         wce.hInstance = g_hInstance;
  23.         wce.hIcon  = 0;
  24.         wce.hCursor = 0;
  25.         wce.hIconSm = 0;
  26.         wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);
  27.         wce.lpszClassName = lpClassName;
  28.         wce.lpszMenuName = 0;
  29.         if(!RegisterClassEx(&wce))
  30.         {
  31.                 MessageBox(NULL,TEXT("注册失败"),TEXT("提示"),MB_OK);
  32.         }

  33. }

  34. HWND CreateWnd(LPCTSTR lpClassName,LPCTSTR name,DWORD Style,HWND hParent)
  35. {
  36.         HWND hWnd = CreateWindowEx(0,lpClassName,name,
  37.                 Style,CW_USEDEFAULT,CW_USEDEFAULT,
  38.                 CW_USEDEFAULT,CW_USEDEFAULT,hParent,NULL,g_hInstance,NULL);

  39.         return hWnd;
  40. }

  41. void DisplayWnd(HWND hWnd)
  42. {
  43.         ShowWindow(hWnd,SW_SHOW);
  44.         UpdateWindow(hWnd);
  45. }

  46. void Message()
  47. {
  48.         MSG msg;
  49.         while(GetMessage(&msg,NULL,0,0))
  50.         {
  51.                 TranslateMessage(&msg);
  52.                 DispatchMessage(&msg);
  53.         }
  54. }

  55. int WINAPI WinMain(HINSTANCE hInstance,
  56.                                    HINSTANCE hPrevInstance,
  57.                                    LPSTR     lpCmdLine,
  58.                                    int       nCmdShow)
  59. {
  60.         g_hInstance = hInstance;

  61.         RegisterWnd(L"denglu",CS_HREDRAW|CS_VREDRAW,WndProc);
  62.         DengLu = CreateWnd(L"denglu",TEXT("登录"),WS_OVERLAPPED|WS_SYSMENU,NULL);
  63.         MoveWindow(DengLu,600,300,280,160,TRUE);
  64.         DisplayWnd(DengLu);

  65.         RegisterWnd(L"Child",CS_HREDRAW|CS_VREDRAW,ChildProc);

  66.         Message();

  67.         return 0;
  68. }

  69. LRESULT CALLBACK WndProc(HWND hWnd,
  70.                                                  UINT uMsg,
  71.                                                  WPARAM wParam,
  72.                                                  LPARAM lParam)
  73. {
  74.         switch(uMsg)
  75.         {
  76.         case WM_CREATE:
  77.                 {
  78.                         hWndEdit = CreateWindowExW(WS_EX_CLIENTEDGE,TEXT("EDIT"),TEXT("bbs.fishc.com"),
  79.                                 WS_CHILD|WS_VISIBLE,40,20,200,30,hWnd,HMENU(1001),g_hInstance,NULL);

  80.                         CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("BUTTON"),TEXT("登录"),
  81.                                 WS_CHILD|WS_VISIBLE,40,80,200,30,hWnd,HMENU(1002),g_hInstance,NULL);

  82.                         ShowWindow(hWnd,SW_SHOW);
  83.                         break;
  84.                 }
  85.         case WM_COMMAND:
  86.                 {
  87.                         switch(wParam)
  88.                         {
  89.                         case 1002:
  90.                                 {
  91.                                         TCHAR szText[100];
  92.                                         GetWindowText(hWndEdit,szText,-1);

  93.                                         if(lstrcmp(szText,TEXT("bbs.fishc.com"))!=0)//输入和预置的不对应
  94.                                                 return 0;//就返回
  95.                                         //正确就执行下面
  96.                                                 MessageBox(NULL,TEXT("输入正确,可以登录"),TEXT("Go"),MB_OK|MB_ICONINFORMATION);
  97.                                         hChild = CreateWnd(L"Child",TEXT("窗口风格管理"),WS_OVERLAPPED|WS_SYSMENU,DengLu);
  98.                                         MoveWindow(hChild,500,300,500,300,TRUE);
  99.                                         DisplayWnd(hChild);
  100.                                        
  101.                                 }
  102.                         }
  103.                         break;//你这里忘了写break

  104.                 }
  105.                
  106.         case WM_DESTROY:
  107.                 PostQuitMessage(0);
  108.                 return 0;
  109.         }
  110.         return DefWindowProc(hWnd,uMsg,wParam,lParam);
  111. }

  112. LRESULT CALLBACK ChildProc(HWND hWnd,
  113.                                                    UINT uMsg,
  114.                                                    WPARAM wParam,
  115.                                                    LPARAM lParam)
  116. {
  117.         switch(uMsg)
  118.         {
  119.         case WM_MOUSEWHEEL:
  120.                 {
  121.             RECT rc,rc1;//rc获得窗口相对于桌面的矩形    rc1要调整的矩形     
  122.             GetWindowRect(hWnd,&rc);
  123.                         rc1=rc;//调整用的矩形先弄的和窗口矩形一样大

  124.             if((int)wParam<0)  //往下滚轮,让窗口扩大
  125.             {
  126.                                 rc1.right=rc.right-rc.left +10;
  127.                                 rc1.bottom=rc.bottom-rc.top+10;
  128.             }
  129.             else
  130.             {
  131.                                 rc1.right=rc.right-rc.left-10;
  132.                                 rc1.bottom=rc.bottom-rc.top-10;
  133.             }
  134.                  MoveWindow(hWnd,rc1.left, rc1.top,rc1.right,rc1.bottom,TRUE);
  135.             break;
  136.         }

  137.         case WM_CREATE:
  138.                 {
  139.                         ShowWindow(DengLu,SW_HIDE);
  140.                         break;
  141.                 }
  142.         case WM_SYSCOMMAND:
  143.                 {
  144.                         switch(wParam)
  145.                         {
  146.                         case SC_CLOSE:
  147.                                 {
  148.                                         ShowWindow(DengLu,SW_SHOW);
  149.                                         break;
  150.                                 }
  151.                         }
  152.                 }
  153.                 break;
  154.         }
  155.         return DefWindowProc(hWnd,uMsg,wParam,lParam);
  156. }
复制代码

评分

参与人数 2荣誉 +40 鱼币 +36 收起 理由
freeparty + 30 + 30 怎么老是没有贡献值。
Angel丶L + 10 + 6 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-11-16 17:54:50 | 显示全部楼层
来看看支持下。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-16 18:06:32 | 显示全部楼层
仙仙,代码报错咯~
QQ拼音截图未命名.png

另外,为什么不上传exe文件呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-16 18:07:15 | 显示全部楼层
c的痛苦之处  ,写个窗口 代码太多  ,不过学了很有用
学会API 在学mfc
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 18:13:03 | 显示全部楼层
~风介~ 发表于 2014-11-16 18:06
仙仙,代码报错咯~

不清楚啦,我这里运行的很好呀,这里又没显示建错项目,555~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 18:13:51 | 显示全部楼层
小人 发表于 2014-11-16 18:07
c的痛苦之处  ,写个窗口 代码太多  ,不过学了很有用
学会API 在学mfc

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-16 18:18:47 | 显示全部楼层
拈花小仙 发表于 2014-11-16 18:13
不清楚啦,我这里运行的很好呀,这里又没显示建错项目,555~

那就把exe文件穿给介介看看吧~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 18:21:50 | 显示全部楼层
~风介~ 发表于 2014-11-16 18:18
那就把exe文件穿给介介看看吧~

WindowStyle.zip (4.97 KB, 下载次数: 18)
嘻嘻,虽然有点菜啦,但是仙仙花了一下午时间写的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 18:22:49 | 显示全部楼层
~风介~ 发表于 2014-11-16 18:18
那就把exe文件穿给介介看看吧~

窗口.jpg
介介建的是这个吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 18:29:53 | 显示全部楼层
小人 发表于 2014-11-16 18:07
c的痛苦之处  ,写个窗口 代码太多  ,不过学了很有用
学会API 在学mfc

还是做不出来,唉
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-16 18:32:47 | 显示全部楼层

比我牛多了  ,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 18:37:02 | 显示全部楼层
小人 发表于 2014-11-16 18:32
比我牛多了  ,

我查了下两个函数都能实现,我只能按楼层给了,以后多答题呀。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-16 18:41:57 | 显示全部楼层
拈花小仙 发表于 2014-11-16 10:37
我查了下两个函数都能实现,我只能按楼层给了,以后多答题呀。

没事  ,我帮助别人的同时 也给自己涨姿势 多接触 加深印象
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-16 18:43:46 | 显示全部楼层
拈花小仙 发表于 2014-11-16 18:21
嘻嘻,虽然有点菜啦,但是仙仙花了一下午时间写的

怎么会!介介都看不懂~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-16 18:44:50 | 显示全部楼层
拈花小仙 发表于 2014-11-16 18:22
介介建的是这个吗?

没错哟!哈哈~待我有时间慢慢查bug~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 18:45:13 | 显示全部楼层
~风介~ 发表于 2014-11-16 18:43
怎么会!介介都看不懂~

介介会QT,学这个半个月因该就会了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 18:47:18 | 显示全部楼层
~风介~ 发表于 2014-11-16 18:44
没错哟!哈哈~待我有时间慢慢查bug~

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-16 18:47:38 | 显示全部楼层
楼主好样的!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-16 20:00:55 | 显示全部楼层
{:1_1:},,支持呵呵。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 05:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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