Can I use resource file(*.rc,*.res) in D under Win32 API?
Sam Hu
samhudotsamhu at gmail.com
Mon Sep 14 00:36:05 PDT 2009
Thank you so much for your help!
Below is the resource file,I compiled it with
rcc -32 testd.rc
it then generated
testd.res.
testd.rc:
#include <windows.h>
101 DIALOG 129, 26, 180, 70
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Show Info"
FONT 8, "MS Sans Serif"
BEGIN
EDITTEXT 102, 19, 15, 147, 12, ES_AUTOHSCROLL
PUSHBUTTON "&Quit", IDCANCEL, 107, 42, 40, 14
PUSHBUTTON "&OK", IDOK, 28, 43, 40, 14
END
Below is the D source file:
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;
//extern(Windows)
//int MessageBoxW(HWND handle,in wchar* text,in wchar* caption,int style);
extern(Windows)
int WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
try
{
Runtime.initialize;
runModuleUnitTests;
WNDCLASSEX wc;
//memset(&wc,0,wc.sizeof);
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;
}
if(!CreateDialog/*DialogBox*/(hInstance,
MAKEINTRESOURCE(101),
null, cast(DLGPROC)&DialogFunc))
{
MessageBox(null,toStringz("Create Dialog failed!"),toStringz("failed"),MB_OK|MB_ICONINFORMATION);
return -1;
}
return 0;
}
catch (Object o) // catch any uncaught exceptions
{
MessageBoxW(HWND.init, cast(wchar*)o.toString, "Fatal Error",
MB_OK | MB_ICONEXCLAMATION);
return -1; // failed
}
finally
{
}
// run finalizers; terminate garbage collector
Runtime.terminate;
return 0;
}
int DialogFunc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
EndDialog(hwnd,1);
return 1;
case IDCANCEL:
EndDialog(hwnd,0);
return 1;
}
break;
case WM_CLOSE:
EndDialog(hwnd,0);
return 1;
}
return 0;
}
I compiled with
bud -O -release -gui -clean testd.d testd.res and it generated testd.exe.
When I run testd.exe,first I heard a beep,then windows popped up an error
messagebox:
testd.exe has encountered a problem and needs to close.We are sorry for the inconvenience.
I tried to upload the screen shot but failed.
So where should I start from?
Regards,
Sam
More information about the Digitalmars-d-learn
mailing list