一段从vc移植过来的代码碰到了点问题~ help

xichen 2003-09-05 11:32:15
在vc中有一段这样的代码:

::DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_MAIN_DIALOG),hWnd, NULL);

现在我已经在bcb中做好了vc中对应的IDD_MAIN_DIALOG 这个窗体

但是如何把这个窗体设置一个这样的id呢? 或者有什么其他办法替代MAKEINTRESOURCE(IDD_MAIN_DIALOG)这个

谢谢!
...全文
21 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jishiping 2003-09-05
  • 打赏
  • 举报
回复
VC 使用的是Dialog,是放在资源里的,类型为 DIALOG(这是Windows定义的标准资源),
而 BCB 使用的 Form 格式,虽然也是放在资源里的,但是它的类型为 RCDATA。而类型为
RCDATA 的资源,对于Windows本身来说是没有格式的,它的格式完全由程序自己来解读。
就是说,BCB的Form存放的资源格式,和VC的Dialog采用的资源格式,是完全不同的。所以
你在BCB里做的Form,应该用BCB的TForm的ShowModal()来显示。
COKING 2003-09-05
  • 打赏
  • 举报
回复
JSP,你误会他的意思了。呵呵。。。。。
他是要把BCB的窗体作为一个“ID为IDD_MAIN_DIALOG的对话框”。
然后在调用。

哎!什么人都有呀!!!!
xichen 2003-09-05
  • 打赏
  • 举报
回复
谢谢。。。可我问的是关于MAKEINTRESOURCE(IDD_MAIN_DIALOG),这个的

如何把我用bcb做的窗体定义成一个 IDD_MAIN_DIALOG 这样的阿?
zihan 2003-09-05
  • 打赏
  • 举报
回复
同意,bcb和vc的几个常用的变量不一样,习惯了就好!
jishiping 2003-09-05
  • 打赏
  • 举报
回复
上面已经说了,如果DialogBox的最后一个参数为NULL,对话框不能关闭。如果想要能关闭,
就要自己写一个消息处理函数(注意下面的例子中,DlgProc不是Form1的成员函数):

BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg,
WPARAM wParam, LPARAM lParam)
{
switch(uMsg) {
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case ID_OK:
EndDialog(hDlg, 1);
return TRUE;
case ID_CANCEL:
EndDialog(hDlg, 2);
return TRUE;
default: return FALSE;
}
default: return FALSE;
}
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
DialogBox(HInstance, MAKEINTRESOURCE(IDD_MAIN_DIALOG),
Handle, (FARPROC)DlgProc));
}
jishiping 2003-09-05
  • 打赏
  • 举报
回复
::DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_MAIN_DIALOG),hWnd, NULL);

这是API的写法啊。最后一个参数好像不能为NULL哦,否则对话框就不能关闭了。BCB中
也可以使用API啊,移植很简单啊,写成下面的就可以了:
::DialogBox(HInstance, MAKEINTRESOURCE(IDD_MAIN_DIALOG), Handle, NULL);

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧