自己动手让Visual Studio的Win32向导支持生成对话框程序

Visual Studio的MFC向导可以生成基于对话框的程序,而win32向导却不支持,是不是很不给力呢?虽然VAX可以直接插入对话框的代码段,但还是没有直接生成来得爽,下面就动手来改造吧。

本文所做的修改仅在自己的VS里测试通过,大家修改之前请备份原文件。

那我们需要改什么呢?看图吧。

首先,找到"VS安装目录\VC\VCWizards\AppWiz\Generic\Application\",如我电脑上的目录就是

"D:\Program Files\Microsoft Visual Studio 11.0\VC\VCWizards\AppWiz\Generic\Application\"

这个目录下就是Win向导的文件了,有四个文件夹,分别是:

不同语言版本的VS,这些目录下会有不同名字的文件夹,都是按LCID来命名,关于LCID,可以参考http://msdn.microsoft.com/en-us/library/ms912047(WinEmbedded.10).aspx

例如英文版的LCID就是1033,简体中文的就是2052。

html\1033目录下有两个htm文件,AppSettings.htm、和Default.htm,这里先修改AppSettings.htm,

我这里用DW打开AppSettings.htm,然后定位到35行,按下图插入代码:

这一段就是定义了顶部的图片,依样画葫芦,插入的代码内容如下:

[html] view plaincopy

  1. <DIV CLASS="SMALL" ID="WIN_DLG_APP_IMAGE" STYLE="DISPLAY:NONE;">
  2. <IMG CLASS="SMALL" SRC="..\..\Images\Dialog.gif" ALT="" BORDER="0">
  3. </DIV>

这里我为了偷懒,直接将

"D:\Program Files\Microsoft Visual Studio 11.0\VC\VCWizards\AppWiz\MFC\Application\images\Dialog.gif"

复制到

"D:\Program Files\Microsoft Visual Studio 11.0\VC\VCWizards\AppWiz\Generic\Application\images\"目录下。

接着,定位到197行,按图插入代码:

看到这里懂点html的同学应该知道了吧?这里就是向导对话框中那几单选按钮。还是和之前一样,依样画葫芦。插入的代码内容如下:

[html] view plaincopy

  1. <INPUT TYPE="radio" CLASS="Radio" onPropertyChange="InitControls();" NAME="apptype" ID="WIN_DLG_APP" ACCESSKEY="B" TITLE="Creates a dialog-based Windows application. The application files include a <projectname>.cpp file that contains the _tWinMain function, and stdafx.cpp and stdafx.h files that are used to create the precompiled header file.">
  2. <DIV CLASS="itemTextRadioB" ID="WIN_DLG_APP_DIV" TITLE="Creates a dialog-based Windows application. The application files include a <projectname>.cpp file that contains the _tWinMain function, and stdafx.cpp and stdafx.h files that are used to create the precompiled header file.">
  3. <LABEL FOR="WIN_DLG_APP" ID="WIN_DLG_APP_LABEL">Dialog-<U>b</U>ased windows application</LABEL>
  4. </DIV>
  5. <BR>

然后再定位到370行,按图插入代码:

插入的代码如下

[javascript] view plaincopy

  1. WIN_DLG_APP.disabled = true;

然后定位到425行,由于我们是要创建基于对话框的的程序,所以没理由是空项目。。所以这里不需要添加空项目的开关;插入的代码如图:

插入的代码如下:

[javascript] view plaincopy

  1. if (WIN_DLG_APP.checked)
  2. {
  3. SUPPORT_ATL.disabled = false;
  4. support_atl_title.disabled = false;
  5. }

定位到526行,插入代码如图:

插入的代码内容如下:

[javascript] view plaincopy

  1. if (WIN_DLG_APP.checked)
  2. {
  3. SUPPORT_ATL.disabled = false;
  4. support_atl_title.disabled = false;
  5. }

定位到第562行,插入代码如图:

插入的代码如下

[javascript] view plaincopy

  1. WIN_DLG_APP_IMAGE.style.display = ‘none‘;

[javascript] view plaincopy

  1. if (WIN_DLG_APP.checked)
  2. {
  3. WIN_DLG_APP_IMAGE.style.display = ‘block‘;
  4. return;
  5. }

至此第一个文件修改完了。。好长呐。。。

继续修改第二个文件default.htm,依然是用DW来打开。定位到11行,插入代码如图:

插入的代码内容:

[html] view plaincopy

  1. <SYMBOL NAME="WIN_DLG_APP" TYPE=checkbox VALUE=false></SYMBOL>

定位到342行,插入代码如图:

顺便吐槽下:微软的coder原来用的是多层嵌套的if。。看着DT。于是我便改成了else if的。。看起来舒服。

插入的代码内容如下:

[javascript] view plaincopy

  1. var L_APPTYPEWIN_DLG_TEXT = "Dialog-based windows application";

[javascript] view plaincopy

  1. if (window.external.FindSymbol("DLL_APP"))
  2. {
  3. APPTYPE.innerText = L_APPTYPEDLL_TEXT;
  4. }
  5. else if (window.external.FindSymbol("CONSOLE_APP"))
  6. {
  7. APPTYPE.innerText = L_APPTYPECON_TEXT;
  8. }
  9. else if (window.external.FindSymbol("LIB_APP"))
  10. {
  11. APPTYPE.innerText = L_APPTYPELIB_TEXT;
  12. }
  13. else if (window.external.FindSymbol("WIN_DLG_APP"))
  14. {
  15. APPTYPE.innerText = L_APPTYPEWIN_DLG_TEXT;
  16. }
  17. else
  18. {
  19. APPTYPE.innerText = L_APPTYPEWIN_TEXT;
  20. }

hoho,第二个文件改好了。

此时打开向导就可以看到已经添加好了,剩下的就是修改代码模板了,继续吧。

打开"scripts\1033\default.js",定位到96行,插入代码如图:

插入代码如下:

[javascript] view plaincopy

  1. <span style="white-space:pre">  </span>if (wizard.FindSymbol("CONSOLE_APP"))
  2. {
  3. strAppType = "CONSOLE";
  4. }
  5. else if (wizard.FindSymbol("WIN_APP"))
  6. {
  7. strAppType = "WIN";
  8. }
  9. else if (wizard.FindSymbol("WIN_DLG_APP"))
  10. {
  11. strAppType = "WIN_DLG";
  12. }
  13. else if (wizard.FindSymbol("DLL_APP"))
  14. {
  15. strAppType = "DLL";
  16. }
  17. else if (wizard.FindSymbol("LIB_APP"))
  18. {
  19. strAppType = "LIB";
  20. }

然后再定位到176行,插入代码如图:

插入代码内容如下:

[javascript] view plaincopy

  1. case "WIN_DLG":

定位到192行,插入代码如图:

然后再定位到241行和261行做同样的修改。又改完一个文件了。。。。

找到"templates\1033"目录,打开readme.txt,分别定位到22行、73行、88行分别修改成如下文本:

22行:

[cpp] view plaincopy

  1. [!if WIN_APP || WIN_DLG_APP]

73行:

[cpp] view plaincopy

  1. [!if WIN_APP || WIN_DLG_APP || SUPPORT_MFC]

88行:

[cpp] view plaincopy

  1. [!if WIN_APP || WIN_DLG_APP]

这个文件就完事了,下一个文件resource.h

将6-17行替换成如下代码:

[cpp] view plaincopy

  1. [!if !WIN_DLG_APP]
  2. #define IDS_APP_TITLE            103
  3. [!endif]
  4. [!if WIN_APP || WIN_DLG_APP]
  5. [!if WIN_APP]
  6. #define IDR_MAINFRAME            128
  7. #define IDD_ABOUTBOX            103
  8. #define IDM_ABOUT                104
  9. #define IDM_EXIT                105
  10. #define IDC_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]            109
  11. #define IDC_MYICON                2
  12. [!endif]
  13. #define IDD_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]_DIALOG    102
  14. #define IDI_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]            107
  15. #define IDI_SMALL                108

接下来需要先在这个目录下创建一个文件,名为"CmnHdr.h",这个头文件的代码如下:

[cpp] view plaincopy

  1. #pragma once   // Include this header file once per compilation unit
  2. /////////////////////////// chHANDLE_DLGMSG Macro /////////////////////////////
  3. // The normal HANDLE_MSG macro in WindowsX.h does not work properly for dialog
  4. // boxes because DlgProc returns a BOOL instead of an LRESULT (like
  5. // WndProcs). This chHANDLE_DLGMSG macro corrects the problem:
  6. #define chHANDLE_DLGMSG(hWnd, message, fn)                 \
  7. case (message): return (SetDlgMsgResult(hWnd, uMsg,     \
  8. HANDLE_##message((hWnd), (wParam), (lParam), (fn))))
  9. //////////////////////// Dialog Box Icon Setting Macro ////////////////////////
  10. // Sets the dialog box icons
  11. inline void chSETDLGICONS(HWND hWnd, int idi) {
  12. SendMessage(hWnd, WM_SETICON, ICON_BIG,  (LPARAM)
  13. LoadIcon((HINSTANCE) GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
  14. MAKEINTRESOURCE(idi)));
  15. SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)
  16. LoadIcon((HINSTANCE) GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
  17. MAKEINTRESOURCE(idi)));
  18. }

看过《Windows 核心编程》的都应该见过上面这段代码吧。作用我就不解释了。

接着修改root.cpp,这个文件里就引用到了刚才上一步添加的头文件,定位到第4行和第13行,修改成如下代码:

4行:

[cpp] view plaincopy

  1. [!if WIN_APP || WIN_DLG_APP]

13行:

[cpp] view plaincopy

  1. [!if WIN_APP || SUPPORT_MFC || WIN_DLG_APP]

然后再定位240行,在[!else]之后插入如下代码:

[cpp] view plaincopy

  1. [!if WIN_DLG_APP]
  2. #include "CmnHdr.h"
  3. // Global Variables:
  4. const TCHAR g_szAppName[] = _T("[!output PROJECT_NAME]");    // The application title text
  5. // Forward declarations of functions included in this code module:
  6. INT_PTR CALLBACK Dlg_Proc(HWND, UINT, WPARAM, LPARAM);
  7. BOOL Dlg_OnInitDialog(HWND, HWND, LPARAM);
  8. void Dlg_OnCommand(HWND, int, HWND, UINT);
  9. // entry function
  10. int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
  11. _In_opt_ HINSTANCE hPrevInstance,
  12. _In_ LPTSTR    lpCmdLine,
  13. _In_ int       nCmdShow)
  14. {
  15. UNREFERENCED_PARAMETER(hPrevInstance);
  16. INT_PTR nResult = DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]_DIALOG),
  17. NULL, Dlg_Proc, _ttoi(lpCmdLine));
  18. return nResult;
  19. }
  20. //
  21. //  FUNCTION: Dlg_Proc(HWND, UINT, WPARAM, LPARAM)
  22. //
  23. //  PURPOSE:  Message handler for Dialog box
  24. //
  25. INT_PTR CALLBACK Dlg_Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
  26. {
  27. switch (uMsg)
  28. {
  29. chHANDLE_DLGMSG(hwndDlg, WM_INITDIALOG, Dlg_OnInitDialog);
  30. chHANDLE_DLGMSG(hwndDlg, WM_COMMAND, Dlg_OnCommand);
  31. }
  32. return FALSE;
  33. }
  34. //
  35. //  FUNCTION: Dlg_OnInitDialog(HWND, HWND, LPARAM)
  36. //
  37. //  PURPOSE:  Initialize the dialog box.
  38. //
  39. BOOL Dlg_OnInitDialog(HWND hwndDlg, HWND hwndFocus, LPARAM lParam)
  40. {
  41. // Sets the dialog box icons
  42. chSETDLGICONS(hwndDlg, IDI_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]);
  43. return TRUE;
  44. }
  45. //
  46. //  FUNCTION: Dlg_OnCommand(HWND, int, HWND, UINT)
  47. //
  48. //  PURPOSE:  Command message handler for dialog box
  49. //
  50. void Dlg_OnCommand(HWND hwndDlg, int id, HWND hwndCtl, UINT codeNotify)
  51. {
  52. switch (id)
  53. {
  54. case IDOK:
  55. case IDCANCEL:
  56. EndDialog(hwndDlg, id);
  57. break;
  58. default:break;
  59. }
  60. }
  61. [!endif]

又一文件改好,继续下一个文件stdafx.h,将38行-43行的内容替换成如下的代码:

[cpp] view plaincopy

  1. [!if DLL_APP || WIN_APP || WIN_DLG_APP]
  2. // Windows Header Files:
  3. #include <windows.h>
  4. [!endif]
  5. [!if WIN_DLG_APP]
  6. // Message Crackers, Child Control Macros, and API Macros Header file:
  7. #include <Windowsx.h>
  8. [!endif]
  9. [!if WIN_APP || WIN_DLG_APP]

然后在文件末尾加上下面这段代码:

[cpp] view plaincopy

  1. #ifdef _UNICODE
  2. #if defined _M_IX86
  3. #pragma comment(linker,"/manifestdependency:\"type=‘win32‘ name=‘Microsoft.Windows.Common-Controls‘ version=‘6.0.0.0‘ processorArchitecture=‘x86‘ publicKeyToken=‘6595b64144ccf1df‘ language=‘*‘\"")
  4. #elif defined _M_X64
  5. #pragma comment(linker,"/manifestdependency:\"type=‘win32‘ name=‘Microsoft.Windows.Common-Controls‘ version=‘6.0.0.0‘ processorArchitecture=‘amd64‘ publicKeyToken=‘6595b64144ccf1df‘ language=‘*‘\"")
  6. #else
  7. #pragma comment(linker,"/manifestdependency:\"type=‘win32‘ name=‘Microsoft.Windows.Common-Controls‘ version=‘6.0.0.0‘ processorArchitecture=‘*‘ publicKeyToken=‘6595b64144ccf1df‘ language=‘*‘\"")
  8. #endif
  9. #endif

目的是为了在UNICODE环境下支持XP/Vista/Win7的样式.

然后再修改下一个文件,Templates.inf,将13行、17行、24行修改成如下代码:

13行:

[cpp] view plaincopy

  1. [!if WIN_APP || WIN_DLG_APP || SUPPORT_MFC]

17行:

[cpp] view plaincopy

  1. [!if WIN_APP || WIN_DLG_APP || SUPPORT_MFC]

24行:

[cpp] view plaincopy

  1. [!if WIN_APP || WIN_DLG_APP]

然后再定位18行,在这行后面加上CmnHdr.h,这样在创建时就会自动把这个文件复制到工程目录下。

最后一个要修改的文件,root.rc,这是一个资源脚本文件,为了方便,我调整了代码结构,这里将整个文件的代码发出来:

[cpp] view plaincopy

  1. //Microsoft Visual C++ generated resource script.
  2. //
  3. #include "resource.h"
  4. #define APSTUDIO_READONLY_SYMBOLS
  5. /////////////////////////////////////////////////////////////////////////////
  6. //
  7. // Generated from the TEXTINCLUDE 2 resource.
  8. //
  9. [!if WIN_APP || WIN_DLG_APP]
  10. #ifndef APSTUDIO_INVOKED
  11. #include "targetver.h"
  12. #endif
  13. #define APSTUDIO_HIDDEN_SYMBOLS
  14. #include "windows.h"
  15. #undef APSTUDIO_HIDDEN_SYMBOLS
  16. [!else]
  17. #include "afxres.h"
  18. [!endif]
  19. /////////////////////////////////////////////////////////////////////////////
  20. #undef APSTUDIO_READONLY_SYMBOLS
  21. #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_[!output LANG_SUFFIX])
  22. LANGUAGE [!output PRIMARY_LANG_ID], [!output SUB_LANG_ID]
  23. [!if WIN_APP || WIN_DLG_APP]
  24. /////////////////////////////////////////////////////////////////////////////
  25. //
  26. // Icon
  27. //
  28. // Icon with lowest ID value placed first to ensure application icon
  29. // remains consistent on all systems.
  30. IDI_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]       ICON         "[!output PROJECT_NAME].ico"
  31. IDI_SMALL               ICON         "small.ico"
  32. [!if WIN_DLG_APP]
  33. /////////////////////////////////////////////////////////////////////////////
  34. //
  35. // DESIGNINFO
  36. //
  37. #ifdef APSTUDIO_INVOKED
  38. GUIDELINES DESIGNINFO
  39. BEGIN
  40. IDD_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]_DIALOG, DIALOG
  41. BEGIN
  42. LEFTMARGIN, 7
  43. RIGHTMARGIN, 313
  44. TOPMARGIN, 7
  45. BOTTOMMARGIN, 193
  46. END
  47. END
  48. #endif    // APSTUDIO_INVOKED
  49. /////////////////////////////////////////////////////////////////////////////
  50. //
  51. // Dialog
  52. //
  53. IDD_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]_DIALOG DIALOGEX 0, 0, 320, 200
  54. STYLE DS_SETFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
  55. EXSTYLE WS_EX_APPWINDOW
  56. CAPTION "[!output PROJECT_NAME]"
  57. FONT 8, "MS Shell Dlg"
  58. BEGIN
  59. DEFPUSHBUTTON   "OK",IDOK,209,179,50,14
  60. PUSHBUTTON      "Cancel",IDCANCEL,263,179,50,14
  61. CTEXT           "TODO: Place dialog controls here.",IDC_STATIC,10,96,300,8
  62. END
  63. [!else]
  64. /////////////////////////////////////////////////////////////////////////////
  65. //
  66. // Menu
  67. //
  68. IDC_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME] MENU
  69. BEGIN
  70. POPUP "&File"
  71. BEGIN
  72. MENUITEM "E&xit",                IDM_EXIT
  73. END
  74. POPUP "&Help"
  75. BEGIN
  76. MENUITEM "&About ...",           IDM_ABOUT
  77. END
  78. END
  79. /////////////////////////////////////////////////////////////////////////////
  80. //
  81. // Accelerator
  82. //
  83. IDC_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME] ACCELERATORS
  84. BEGIN
  85. "?",            IDM_ABOUT,              ASCII,  ALT
  86. "/",            IDM_ABOUT,              ASCII,  ALT
  87. END
  88. /////////////////////////////////////////////////////////////////////////////
  89. //
  90. // String Table
  91. //
  92. STRINGTABLE
  93. BEGIN
  94. IDC_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]   "[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]"
  95. IDS_APP_TITLE       "[!output PROJECT_NAME]"
  96. END
  97. /////////////////////////////////////////////////////////////////////////////
  98. //
  99. // Dialog
  100. //
  101. IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
  102. STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
  103. CAPTION "About [!output PROJECT_NAME]"
  104. FONT [!output DLG_FONT_SIZE], "[!output DLG_FONT_NAME]"
  105. BEGIN
  106. ICON            IDR_MAINFRAME,IDC_STATIC,14,14,21,20
  107. LTEXT           "[!output PROJECT_NAME], Version 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX
  108. LTEXT           "Copyright (C) [!output YEAR]",IDC_STATIC,42,26,114,8
  109. DEFPUSHBUTTON   "OK",IDOK,113,41,50,14,WS_GROUP
  110. END
  111. /////////////////////////////////////////////////////////////////////////////
  112. //
  113. // DESIGNINFO
  114. //
  115. #ifdef APSTUDIO_INVOKED
  116. GUIDELINES DESIGNINFO
  117. BEGIN
  118. IDD_ABOUTBOX, DIALOG
  119. BEGIN
  120. LEFTMARGIN, 7
  121. RIGHTMARGIN, 163
  122. TOPMARGIN, 7
  123. BOTTOMMARGIN, 55
  124. END
  125. END
  126. #endif    // APSTUDIO_INVOKED
  127. [!endif]
  128. #ifdef APSTUDIO_INVOKED
  129. /////////////////////////////////////////////////////////////////////////////
  130. //
  131. // TEXTINCLUDE
  132. //
  133. TEXTINCLUDE
  134. BEGIN
  135. "resource.h\0"
  136. END
  137. TEXTINCLUDE
  138. BEGIN
  139. "#ifndef APSTUDIO_INVOKED\r\n"
  140. "#include ""targetver.h""\r\n"
  141. "#endif\r\n"
  142. "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
  143. "#include ""windows.h""\r\n"
  144. "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
  145. "\0"
  146. END
  147. TEXTINCLUDE
  148. BEGIN
  149. "\r\n"
  150. "\0"
  151. END
  152. #endif    // APSTUDIO_INVOKED
  153. [!else]
  154. #ifdef APSTUDIO_INVOKED
  155. /////////////////////////////////////////////////////////////////////////////
  156. //
  157. // TEXTINCLUDE
  158. //
  159. TEXTINCLUDE
  160. BEGIN
  161. "resource.h\0"
  162. END
  163. TEXTINCLUDE
  164. BEGIN
  165. "#include ""afxres.h""\r\n"
  166. "\0"
  167. END
  168. TEXTINCLUDE
  169. BEGIN
  170. "\r\n"
  171. "\0"
  172. END
  173. #endif    // APSTUDIO_INVOKED
  174. /////////////////////////////////////////////////////////////////////////////
  175. //
  176. // String Table
  177. //
  178. STRINGTABLE
  179. BEGIN
  180. IDS_APP_TITLE       "[!output PROJECT_NAME]"
  181. END
  182. [!endif]
  183. #endif
  184. /////////////////////////////////////////////////////////////////////////////
  185. #ifndef APSTUDIO_INVOKED
  186. /////////////////////////////////////////////////////////////////////////////
  187. //
  188. // Generated from the TEXTINCLUDE 3 resource.
  189. //
  190. [!if SUPPORT_MFC]
  191. #ifndef _AFXDLL
  192. #include "[!output MFC_RC_INCLUDE_PREFIX]afxres.rc"
  193. #endif
  194. [!endif]
  195. /////////////////////////////////////////////////////////////////////////////
  196. #endif    // not APSTUDIO_INVOKED

终于修改完成了,赶紧创建一个新项目试试吧。。。

测试截图:

下面提供两份已经改好的文件,直接覆盖即可:

VS2010英文旗舰版:Generic_for_VS10.7z

VS2012英文旗舰版:Generic_for_VS11.7z

以上两份均测试通过,其他版本请自行修改测试。

欢迎转载本文章,但请标明出处,原文地址:
http://www.cnblogs.com/hwangbae/archive/2012/07/26/2610469.html

时间: 2024-08-05 19:56:26

自己动手让Visual Studio的Win32向导支持生成对话框程序的相关文章

如何使用Visual Studio 2010在数据库中生成随机测试数据

测试在项目中是很重要的一个环节,在Visual Studio 2010中,在测试方面已经有很好的支持了,比如有单元测试,负载测试等等.在数据测试的方面,Visual Studio 2010,还支持对数据库进行多种测试,其中一个很好用的功能是能为开发者在测试阶段,大量方便地为数据库生成随机的数据,而且还可以自己指定生成数据的规则,十分方便,这就让在测试过程中,开发者能有更充足的数据样本对项目进行测试.本文则介绍其中的Data Generation数据生成器的使用方法. 1 创建SQL Server

让Visual Studio 2008 和 2010支持Web Services Enhancements (WSE) 3.0

为什么我VS2010,C#添加服务引用没有?为什么不能添加服务引用? /* from:http://digantakumar.com/2010/06/04/wse-3-in-visual-studio-2008-and-2010/ */ 不翻居然图都看不到,真是个杯具,干脆拿过来吧 VS2008和2010默认是不支持Web Services Enhancements (WSE) 3.0,因为MS希望用WCF来代替.下面是关于让Visual Studio 2008 和 2010支持Web Serv

在 Oracle 数据库上使用 Visual Studio 2005 或 2008 构建 .NET 应用程序 了解构建使用 Oracle 数据库的 .NET 应用程序所涉及到的基本但不可或缺的过程。

随着 Microsoft 的 .NET Framework 的日益流行,许多开发人员迫切想了解关于将 .NET 应用程序与 Oracle 集成的最佳方法的信息 - 不仅在基本连通性方面,还包括与使用 Visual Studio 2005 或 2008 进行有效应用程序开发的关系. 在本文中,我将说明构建使用 Oracle 数据库的 .NET 应用程序所涉及到的基本但不可或缺的过程,包括: 如何添加工程引用,以在您的 .NET 工程中支持 Oracle 类 如何创建 Oracle 数据库连接字符串

Visual Studio 2013 如何在停止调试Web程序后阻止IIS Express关闭

vs2013 调试项目的时候,当停止调试的时候,端口就被断了.之前以为是IIS那边的控制问题,但是其他并行的项目运行都没有出现这种情况. 最初也没在意,直到现在实在忍受不了了,每次重开也太烦了.就去各种觉得靠谱的关键字查,根据"IIS Express 自动关闭"查到的(之前查了一堆,关键字的把握还有待提高啊) 英文链接(没搞清楚哪个是原文) http://developerpublish.com/visual-studio-2013-tips-tricks-prevent-closin

BUILD 2015: Visual Studio对GitHub的支持

微软BUILD 2015大会上发布了Visual Studio 对GitHub的支持.安装了如下Developer Assistant插件后,你便可以在Visual Studio中找到GitHub上的示例代码,或一键下载GitHub上知名的开源项目 Developer Assistant for Visual Studio 2015 RC Developer Assistant for Visual Studio 2013 Developer Assistant for Visual Studi

用Visual Studio 2010编写Data Url生成工具C#版

声明:本文系本人依照真实经历原创,未经许可,谢绝转载. 此文百度经验版本:如何用Visual Studio 2010打造Data Url生成工具 源码下载:用Visual Studio 2010编写Data Url生成工具C#源码 什么是Data Url呢?Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入. 例如: <img src="data:image/png;base64,iVBORw0KGgoAAAANSUh

使用Visual Studio 2010 创建简单的Silverlight应用程序

使用Visual Studio 2010 创建简单的Silverlight应用程序 Silverlight是创建动态的引人的RIAs(Rich Internet Application)的新方法.这里教你创建简单的Silverlight应用程序. 1. 打开VS,新建项目,选择Silverlight应用程序模板. 2. 命名mySimpleSilverlightApplication,点击确定. 3. 在弹出的对话框中,清除"在新网站中承载Silverlight应用程序"复选框,点击确

在Visual Studio中快速启动调试Web应用程序

原文:http://blog.csdn.net/effun/article/details/2638535 从2003到2005,Visual Studio在启动调试的功能上进行了一些改善,不过因为只是简单的一个F5键,很多人可能都不会注意.其实也已经不是很记得清楚在2003启动调试是什么样的问题,因为已经有两年多没用了,只是依稀记得每启动一次就会打开一个新的IE窗口.因为打开IE是需要耗费一点时间的,所以总在寻求一个办法减少这个过程所消耗的时间. 后来2005来了,这个问题被有效地解决了.VS

Visual Studio C++ Win32控制台应用程序,Win32项目,MFC的区别

背景 Visual Studio C++ 创建新项目蹦出来如下选项: Win32控制台应用程序,Win32项目,MFC有什么区别? 正文: Win32控制台,没有界面,命令行执行生成的文件则直接在后台运行,运行效果如下:生成的".exe"文件相当于Linux系统下用gcc编译出来一个".out"文件,直接运行操作即可,只有命令符,没有界面. Win32项目这个就有界面了,但是界面里面的控件,基本上要自己去实现. MFC项目这个也有界面,可是界面里面的控件就不需要自己