鱼C论坛

 找回密码
 立即注册
查看: 7871|回复: 27

[技术交流] VS2010自己DIY的Dialog程序创建流程(非MFC)

[复制链接]
发表于 2011-10-8 01:30:18 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 yipwing 于 2011-10-8 01:30 编辑

首先说说,偶第一次发这种帖子,以前都是个潜水族,这个是我自己DIY的。。如果鱼油们喜欢DIY就拿去自己DIY。。如有错漏还请鱼油们指点指点。。
顺带一提,本文写给第一次接触Windows 编程(c/c++)的鱼油们。。SDK写CreateWindow各种不方便有木有?
这里抱歉了,没有图片。。。
打开VS2010
1.新建一个项目并选择Win32选项
2.点击下一步,勾选选择空项目并点击完成
3.打开解决方案管理器 右键-->添加-->新建项-->选择头文件,并为文件取个你喜欢的名字
4.再次新建一个头文件(用作预编译),命名为stdafx.h(MFC生成的也有这个,你也可以复制一个MFC创建Dialog的stdafx.h,然后自己DIY); 关于预编译这里就不说了,自行google..
5.添加targetver.h
6.接下来就是.cpp文件,cpp也可以写C代码的; 命名也是随便取。然后是添加stdafx.cpp
7.最后,添加一个资源。 在资源文件那里右键-->添加-->资源,编译器会自动生成一个resource.h(这里会弹出一个添加资源的小窗口,点击Dialog,然后点击新建按钮);

好了,接下来是写代码了。。

为了方便我把我自己DIY的代码放上来。。附件在最后..

.h(不是预编译头文件)文件里添加几个函数定义和全局变量


  1. #pragma once

  2. #include "resource.h"


  3. bool InitInstances(HINSTANCE hInstance, int nShowCmd); //初始化实例

  4. bool InitDialogs(HWND hwnd);  //初始化Dialog窗口

  5. LRESULT CALLBACK Evol(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam); //主窗口回调

  6. // 全局变量:
  7. HINSTANCE g_hInst;                                                                // 当前实例
  8. HWND g_hMainDlg;                                                                        // 主窗口句柄
  9. HANDLE g_hFile;                                                                                // 主要修改文件
复制代码


stdafx.h部分

  1. // stdafx.h : 标准系统包含文件的包含文件,
  2. // 或是经常使用但不常更改的
  3. // 特定于项目的包含文件
  4. //

  5. #pragma once

  6. #include "targetver.h"

  7. #define WIN32_LEAN_AND_MEAN             //  从 Windows 头文件中排除极少使用的信息
  8. // Windows 头文件:
  9. #include <windows.h>
  10. #include <WindowsX.h>
  11. #include <Commctrl.h>                        // Windows component
  12. #include <Shellapi.h>                        // Windows Shell API
  13. #include <Tlhelp32.h>                        // Windows Process API
  14. #include <shobjidl.h>                        
  15. #include <shlobj.h>
  16. #include <Shlwapi.h>

  17. // C 运行时头文件
  18. #include <stdlib.h>
  19. #include <malloc.h>
  20. #include <memory.h>
  21. #include <tchar.h>
  22. // C++ 运行时文件
  23. #include <assert.h>
  24. // VC++ Header Files:
  25. #include <uxtheme.h>
  26. //Kernel Function..
  27. #include <Winternl.h>

  28. // TODO: 在此处引用程序需要的其他头文件
复制代码

stdafx.cpp部分


  1. #include "stdafx.h"
复制代码

targetver.h部分

  1. #pragma once

  2. // 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。

  3. // 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
  4. // WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。

  5. #include <SDKDDKVer.h>

复制代码


.cpp代码部分

  1. // Test.cpp : 定义应用程序的入口点。

  2. #include "stdafx.h"
  3. #include "Evol.h"
  4. #pragma comment(lib,"Comctl32.lib")



  5. int APIENTRY _tWinMain(HINSTANCE hInstance,
  6.                      HINSTANCE hPrevInstance,
  7.                      LPTSTR    lpCmdLine,
  8.                      int       nCmdShow)
  9. {
  10.         MSG msg;
  11.         HACCEL hAccelTable;

  12.         if (!InitInstances(hInstance,nCmdShow)) //初始化实例
  13.         {
  14.                 return false;
  15.         }
  16.         hAccelTable = LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACC)); //载入加速键表
  17.         while (GetMessage(&msg, NULL, 0, 0))                //消息循环
  18.         {
  19.                 if (TranslateAccelerator(g_hMainDlg, hAccelTable, &msg)||!IsDialogMessage(g_hMainDlg,&msg)) //消息处理
  20.                 {
  21.                         TranslateMessage(&msg);
  22.                         DispatchMessage(&msg);
  23.                 }
  24.         }
  25.         return (int)msg.wParam;

  26. }

  27. bool InitInstances(HINSTANCE hInstance, int nShowCmd)
  28. {
  29.          INITCOMMONCONTROLSEX icex;                //某些控件需要,这是一个结构体                                                 │
  30.          icex.dwSize=sizeof(icex);                //设置此结构体的大小                                                                 │
  31.          icex.dwICC=ICC_INTERNET_CLASSES + ICC_WIN95_CLASSES;        //控件使用的样式                         │
  32.          InitCommonControlsEx(&icex);        //初始化控件类

  33.         g_hInst = hInstance;                        //传递给全局变量
  34.         g_hMainDlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL,(DLGPROC)Evol);  //创建Dialog窗口,并把句柄传递给全局变量

  35.         if (g_hMainDlg==NULL)
  36.         {
  37.                 return false;
  38.         }
  39. ////////////////////////////////////////////
  40. //  这里是只让程序运行一个,方法有好几个,这里用我认为最简单的。
  41. //
  42.         if (!CreateMutex(NULL,TRUE,L"one")) //创建一个互斥对象
  43.         {
  44.                 return false;                              
  45.         }
  46.         if (GetLastError()==ERROR_ALREADY_EXISTS) //如果已经有一个存在
  47.         {
  48.                 ShowWindow(g_hMainDlg,SW_RESTORE);               
  49.                 SetForegroundWindow(g_hMainDlg);
  50.                 return false;
  51.         }
  52. ////////////////////////////////////////////
  53.         ShowWindow(g_hMainDlg,SW_SHOWNORMAL);
  54.         UpdateWindow(g_hMainDlg);
  55.         return true;
  56. }
  57. ////////////////////////////////////////////
  58. //  主窗口回调
  59. //  
  60. LRESULT CALLBACK Evol(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam)
  61. {
  62.         int wmId,wmEvent;
  63.         wmId    = LOWORD(wParam);
  64.         wmEvent = HIWORD(wParam);
  65.         switch(uMsg)
  66.         {
  67.         case WM_SYSCOMMAND:
  68.                 break;
  69.         case WM_COMMAND:
  70.                 break;
  71.         case WM_CLOSE:
  72.                 DestroyWindow(hwnd);
  73.                 break;
  74.         case WM_DESTROY:
  75.                 PostQuitMessage(0);
  76.                 break;
  77.         case WM_INITDIALOG:
  78.                 return InitDialogs(hwnd);
  79.         }

  80.         return 0;
  81. }

  82. ///////////////////////////////////////////
  83. //  初始化Dialog窗口
  84. //  我这里处理的是窗口左上角的小图标
  85. bool InitDialogs(HWND hwnd)
  86. {
  87.         HMENU hMenu = GetSystemMenu(hwnd,FALSE);        //获得窗口句柄,并赋给HMENU的变量
  88.         if (!hMenu)
  89.                 return false;
  90.         HICON hIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_TEST), IMAGE_ICON, 0,0, LR_SHARED+LR_DEFAULTSIZE);  //载入- -!!不知道怎么说,反正就是载入一个图像
  91.         SendMessage(hwnd,WM_SETICON,ICON_BIG,(LPARAM)hIcon);        //发送消息
  92.         SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)hIcon);        //同上

  93.         return TRUE;
  94. }
复制代码
源码:
游客,如果您要查看本帖隐藏内容请回复

最后的最后 如有啥问题,请回帖告之。。谢谢各位鱼油。。。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 01:47:52 | 显示全部楼层
新词蛋生了:鱼油!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-8 01:54:49 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-8 02:08 编辑

这还真是我故意打的。。

顺便问下,你的学习方向。。。

明天来看你的回答,睡觉去了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 13:57:01 | 显示全部楼层
唉,不想打击的,,,,,,其实鱼油这个词  在论坛里出来非常久了..............


不过这个还是很好的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-8 13:59:58 | 显示全部楼层
Y.H 发表于 2011-10-8 13:57
唉,不想打击的,,,,,,其实鱼油这个词  在论坛里出来非常久了..............

鱼油貌似是小甲鱼先说的。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-11 20:09:06 | 显示全部楼层
好贴,正好需要:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-1-31 21:11:59 | 显示全部楼层
好贴,正好需要
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-6-20 11:20:09 | 显示全部楼层
终于可以回复了  急需代码啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-3 09:43:55 | 显示全部楼层
学习了,感谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-3 17:30:21 | 显示全部楼层
看看,回帖支持下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-3 21:58:30 | 显示全部楼层
看看支持下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-3 22:15:05 | 显示全部楼层
灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-4 11:41:53 | 显示全部楼层
再看看,温故知新
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-4 19:59:35 | 显示全部楼层
代码  代码:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-30 19:49:16 | 显示全部楼层
谢谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-10 14:21:45 | 显示全部楼层
谢谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-20 22:19:28 | 显示全部楼层
看一下隐藏的,学习了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-21 01:03:30 | 显示全部楼层
对楼猪只能说,你太伟大了!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-21 09:35:27 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-24 22:20:43 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 18:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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