终于试成功了。总结一下:
一.在*.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
分享到:
相关推荐
"vc15"指的是该软件使用了Microsoft Visual Studio 2017(因为Visual Studio 15代表2017版本)的编译器进行编译,这通常意味着它与Windows平台有很好的兼容性。 描述中的信息提供了文件的哈希值,这是一个用于验证...
综上所述,这些知识点涵盖了twm000提供的XP系统资源的相关信息,包括资源的来源、版本特点、配置细节以及具体的资源文件信息等。对于需要使用这些资源的用户来说,这些信息是非常有价值的参考。
7. **压缩包子文件的文件名称列表**:d2fb7c67bc6b403e96e257a2eecf701f可能是一个哈希值或者文件的唯一标识,用于确认下载的文件完整性,防止因传输错误导致内容缺失。 总的来说,这个资源包不仅提供了游戏源码,...
描述中的"VC帮助文档"指的是Visual C++的开发文档,其中包含了对MFC类库的详细解释,以及如何使用这些类进行编程的示例。这些文档通常会涵盖类的构造、成员函数、常量和宏等内容,是学习和查询MFC不可或缺的资源。而...
【Microsoft Visual C++ 2010 Express】是微软公司推出的免费版本的C++集成开发环境,...而压缩包中的文件5d2b841ae94d42cebd29b92742ae0c20可能是一个安装文件或者相关的文档,可以帮助用户进一步了解和安装这款软件。
在提供的文件"Direct2D-Hardware-Acceleration-in-Windows-7-Plotti.pdf"中,可能包含了详细的教程、示例代码和最佳实践,帮助开发者深入了解和掌握Direct2D的使用。而" d2d.zip "可能包含了一些实用的Direct2D示例...
SDK包中包含了控件的源代码以及其他资源文件,开发者可以在`samples`子目录下找到具体的示例代码,这些示例可以帮助开发者更快地理解和使用该控件。 #### 四、ET99全功能ActiveX控件接口介绍 ET99全功能ActiveX控件...
件资源可实的远程编程。 ISP 功能的优点: ①在系统中编程不需要移出微控制器。 ②不需并行编程器仅需用P15,P16 和P17,这三个IO 仅仅是下载程序的时 候使用,并不影响程序的使用。 ③结合上位机软件免费就可实现PC...