`
betty_betty2008
  • 浏览: 25402 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
最近访客 更多访客>>
社区版块
存档分类
最新评论

D2 中使用VC的Windows资源文件

    博客分类:
  • D
阅读更多
终于试成功了。总结一下:

一.在*.RC里包含windows头文件,因为不用系统预定义常量的机会不多
#include <windows.h>
二.直接在*.RC里定义自定义常量
#define IDD_MAIN
#define IDC_TEXT1 102

等等
三.用Walter的 rcc.exe编译*rc
rcc.exe -32 myresource.rc
生成myresource.res
四.在D源文件里还要定义一次资源中的常量:
const int IDD_MAIN=101;
const int IDC_TEXT1=102;
等等
五.编译D:
bud -O -release -gui -clean testd.d testd.res
生成testd.exe
以下是测试程序
testd.rc:
#include <windows.h>

#define	IDD_MAIN	101
#define	IDC_TEXT1	102


IDD_MAIN DIALOG 129, 26, 180, 70
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Show Info"
FONT 8, "MS Sans Serif"
BEGIN
    EDITTEXT        IDC_TEXT1, 19, 15, 147, 12, ES_AUTOHSCROLL
    PUSHBUTTON      "&Quit", IDCANCEL, 107, 42, 40, 14
    PUSHBUTTON      "&OK", IDOK, 28, 43, 40, 14
END


D源文件:testd.d:

module testd;

//import std.c.windows.windows;
import win32.windows;
import std.string;
import std.conv;

import std.stdio;

import core.runtime;
import core.stdc.stdlib;
import core.stdc.stdio;

const int IDD_MAIN=101;
const int IDC_TEXT1=102;
extern(Windows)
int WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    
		int retval;
		Runtime.initialize;
		runModuleUnitTests;
	
		WNDCLASSEX wc;
		
		wc.cbSize=wc.sizeof;
		wc.lpfnWndProc=&DefDlgProc;
		wc.cbWndExtra=DLGWINDOWEXTRA;
		wc.hInstance=hInstance;
		wc.hCursor=LoadCursor(null,IDC_ARROW);
		wc.hbrBackground=cast(HBRUSH)(COLOR_WINDOW+1);
		wc.lpszClassName=toStringz("dialog");
		if(!RegisterClassEx(&wc))
		{
			MessageBox(null,toStringz("Register class failed"),toStringz("failed"),MB_OK|MB_ICONERROR);
			return -1;
		}
	
		retval= DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), null, &DialogFunc);
		
	// run finalizers; terminate garbage collector
    Runtime.terminate;
    		
    return retval;
}


extern(Windows)
int  DialogFunc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
	switch(msg)
	{
		case WM_INITDIALOG:
		{
			SetFocus(GetDlgItem(hwnd,IDC_TEXT1));
			EnableWindow(GetDlgItem(hwnd,IDOK),0);
			
			
		}
		case WM_COMMAND:
		switch(LOWORD(wParam))
		{
			case IDC_TEXT1:
			{
				switch(HIWORD(wParam))
				{
					case EN_CHANGE:
					{
						int nLength=GetWindowTextLength(GetDlgItem(hwnd,IDC_TEXT1));
						EnableWindow(GetDlgItem(hwnd,IDOK),nLength>0);
					}
					break;
					default:
					break;
				}
			}
			break;
			case IDOK:
			{
				
				char[1024] prompt;
				GetDlgItemText(hwnd,IDC_TEXT1,cast(char*)prompt,cast(char*)prompt.sizeof);
				MessageBox(null,cast(char*)prompt,"text in textbox is",0);
			}
			
			return 1;
			case IDCANCEL:
			{
				int retval=MessageBox(null,"Are you sure to close the dialog?",
						"Confirm on close",MB_YESNO|MB_ICONQUESTION);
				if(retval==IDYES)
					EndDialog(hwnd,0);				
			}
			
			return 1;
			default:
			break;
		}
		break;
		case WM_CLOSE:
			EndDialog(hwnd,0);
			return 1;
		default:
		break;
		//assert(0);
	}
	return 0;
}


附程序执行时屏幕截图。
  • 大小: 8.8 KB
  • 大小: 24.5 KB
  • 大小: 22.2 KB
分享到:
评论

相关推荐

    httpd-2.4.41-o111c-x64-vc15-r2

    "vc15"指的是该软件使用了Microsoft Visual Studio 2017(因为Visual Studio 15代表2017版本)的编译器进行编译,这通常意味着它与Windows平台有很好的兼容性。 描述中的信息提供了文件的哈希值,这是一个用于验证...

    系统资源链接地址

    综上所述,这些知识点涵盖了twm000提供的XP系统资源的相关信息,包括资源的来源、版本特点、配置细节以及具体的资源文件信息等。对于需要使用这些资源的用户来说,这些信息是非常有价值的参考。

    挖金子修订版源码和文档

    7. **压缩包子文件的文件名称列表**:d2fb7c67bc6b403e96e257a2eecf701f可能是一个哈希值或者文件的唯一标识,用于确认下载的文件完整性,防止因传输错误导致内容缺失。 总的来说,这个资源包不仅提供了游戏源码,...

    MFC类库参考手册(一)(A~H).rar

    描述中的"VC帮助文档"指的是Visual C++的开发文档,其中包含了对MFC类库的详细解释,以及如何使用这些类进行编程的示例。这些文档通常会涵盖类的构造、成员函数、常量和宏等内容,是学习和查询MFC不可或缺的资源。而...

    vc++2010学习版(Microsoft Visual C++ 2010 Express)

    【Microsoft Visual C++ 2010 Express】是微软公司推出的免费版本的C++集成开发环境,...而压缩包中的文件5d2b841ae94d42cebd29b92742ae0c20可能是一个安装文件或者相关的文档,可以帮助用户进一步了解和安装这款软件。

    Direct2D:Windows 7绘图中的硬件加速

    在提供的文件"Direct2D-Hardware-Acceleration-in-Windows-7-Plotti.pdf"中,可能包含了详细的教程、示例代码和最佳实践,帮助开发者深入了解和掌握Direct2D的使用。而" d2d.zip "可能包含了一些实用的Direct2D示例...

    全功能ActiveX控件参考手册

    SDK包中包含了控件的源代码以及其他资源文件,开发者可以在`samples`子目录下找到具体的示例代码,这些示例可以帮助开发者更快地理解和使用该控件。 #### 四、ET99全功能ActiveX控件接口介绍 ET99全功能ActiveX控件...

    基于AT89S52 单片的频率计

    件资源可实的远程编程。 ISP 功能的优点: ①在系统中编程不需要移出微控制器。 ②不需并行编程器仅需用P15,P16 和P17,这三个IO 仅仅是下载程序的时 候使用,并不影响程序的使用。 ③结合上位机软件免费就可实现PC...

Global site tag (gtag.js) - Google Analytics