纯SDK程序怎样包含对话框?

TopCat 2003-10-17 02:23:07
我用纯SDK写了一个程序,在程序里需要用到对话框,我自己写了一个RC文件,然后先用bcc32编译程序,用brc32绑定对话框资源,但是为什么对话框弹不出来?(没有编译和运行错误,就是没有对话框出现)

以前没有写过纯SDK的程序,在VC下又有集成环境的帮助,所以对资源绑定的步骤并不是十分了解(IDE害死人啊:S )

是我的RC用错了?是Dialog里资源字符串写错了?还是编译步骤不对?

请高手指点

PS:请问有没有免费的资源编辑工具?麻烦一点无所谓,只要是能编辑对话框资源就可以,其他我可以自己手工写。一定要免费的
...全文
50 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
TopCat 2003-10-18
  • 打赏
  • 举报
回复
太感谢ThinkX了,lcc中的资源编辑器仍然是独立的,叫weditres.exe。

结帖~
ThinkX 2003-10-18
  • 打赏
  • 举报
回复
资源创建工具可以使用lcc中的。我记得以前它是一个单独运行的程序,不过现在的lcc可能将其整合进IDE了。而Borland的ResourceWorkshop又太老了。
TurboDebugger其实和BCB的调试器非常象。
使用时,用bcc的-v携带调试信息,然后用TD打开这个exe就可以了,TD毕竟是图形化的调试,比gdb更直观些。
Emacs确实够强大,插件很多,不过太复杂了。我现在正在配置mmm-mode,不过还没有搞明白。
TopCat 2003-10-18
  • 打赏
  • 举报
回复
昨天下载了dev-cpp试了一下,确实不需要其他库,但是编译出来的程序比用BCB编译出来的大一倍(别说我苛刻啊,我就是想减小尺寸才决定用纯SDK写代码的),BCB编译出来是53k,而g++编译出来是102k,所以最终还是放弃了。

emacs我曾经冲击过几次,都半途而废了,感觉没有精力去玩它,可能是自己太懒了 :P,现在我Windows下用Crimson Editor(一个免费的程序,跟EditPlus差不多),Linux下用vi,反正自己感觉也挺顺手。

现在就缺一个资源编辑器和一个调试器,TurboDebugger不会用,呵呵。不过我自己写了点辅助调试的工具,配合一些小工具,跟踪还是没什么问题,断点只好不用了。艰苦的环境容易锻炼人,谁说的来着?呵呵。

不过还是希望能找到一个资源编辑器,我对屏幕坐标实在是没什么感觉,要是纯靠代码写实在受不了,如果真的找不到我要考虑是不是自己动手写一个了 :)
ThinkX 2003-10-17
  • 打赏
  • 举报
回复
MinGW编译出来的东西应该不需要其他库,和普通的程序是一样的,实际上用mingw并不需要cygwin,只要单独安装就可以了。
其中有完整的gcc, g++, gdb, gnumake等工具,和bcc一样,里面带有stl和win32 sdk的头文件和库文件。不过相关的资料不多。
如果用mingw配合emacs很好用,emacs对gdb的调试是可以集成的。我刚刚配置好emacs,可以让它处理中文。
TopCat 2003-10-17
  • 打赏
  • 举报
回复
哦?MingGW编译出来的东西需要额外的DLL之类吗?还是跟本地Windows程序一摸一样?如果是后者我就试试。

to yyszh:
多谢你的关注,不过不是消息处理有问题(其实不是代码的问题),这个问题已经被ThinkX解决了。
ThinkX 2003-10-17
  • 打赏
  • 举报
回复
呵呵,我用MinGW中的gcc,也不错,不过它的windres来编译资源后,发现其中如果有中文会有问题,我还不知道怎么解决。
yyszh 2003-10-17
  • 打赏
  • 举报
回复
能贴出AboutDlgProc的代码吗?
yyszh 2003-10-17
  • 打赏
  • 举报
回复
肯定是你的消息处理函数AboutDlgProc有问题
TopCat 2003-10-17
  • 打赏
  • 举报
回复
果然搞定了,呵呵,原来是用ilink32连接资源,我一直以为是用brc32呢,基础不扎实啊,呵呵。

多谢ThinkX,其实因为工作忙的关系,一直没有空完整的看一遍这本书,这次只是因为我GF需要一个小程序,我才去那本书上抄了一个源代码下来自己改 :)

最近不知为什么,特别注意版权问题,所以家里没有装C++ Builder,只装了一个Command Line Tool的免费版本,这样一来一切都要自己动手,有很多新的挑战啊,不过我挺喜欢的。呵呵。

现在就是对话框资源编辑太不方便了,最好能有一个免费的资源编辑工具,不知道哪里有。

这个帖子先放两天,星期一来结。

再次谢谢ThinkX了,以后有问题还请多指教 :)
ThinkX 2003-10-17
  • 打赏
  • 举报
回复
to TopCat,
呵呵,很巧,我前几天又看了一次这本书,你编译的好像是第11章的内容。我没有你的完整代码,所以我也不知道错在哪里,不过我编译了一下书上的例子,是可以通过的。
如果你没有此书的代码,去
http://www.qinyun.com/codes/Programming%20windows%20fifth%20edition.rar
下载源代码。
我举个例子,第11章(讲对话框的那章)的第一个例子(Chap11/About1)。就是显示一个About Box的那个例子,何你的代码几乎一样。

1.用(你必须在About1.rc的开头去掉#include "afxres.h"这行代码,否则无法编译通过)
brcc32 About1.rc
这样编译资源生成了About1.res

2.用
bcc32 -tW -c About1.c
这样生成了About1.obj(-tW:生成WinMain入口程序,-c:只编译不链接)

3.用
ilink32 -aa c0w32 About1.obj About1.exe, , import32 cw32, , About1.res
进行链接,其中,-aa:生成Windows程序 c0w32:用c0w32作为用Ansi版本来启动WinMain, import32和cw32为library。

现在就搞定了。

在bc中还可以在About1.c中插入一句
#pragma resource "*.res" //其中*.res并不是指任意的res文件,而是和About1.c同名的About1.res,在BCB中"*.dfm"也是一样的道理。
这样就不需要链接了
只要
brcc32 About1.rc
bcc32 -tW About1.c
就可以输出About1.exe了。
jiangchun_xn 2003-10-17
  • 打赏
  • 举报
回复
用vc试试。。
TopCat 2003-10-17
  • 打赏
  • 举报
回复
这些代码其实是从Charles Petzold的Programming Windows/5ed里抄来修改的,代码本身应该没什么错,就是不知道资源连接的时候要注意什么
TopCat 2003-10-17
  • 打赏
  • 举报
回复
这个我知道,windows的API是:DialogBox。我还是把问题说清楚些把。

我的RC文件片断:
#include "resource.h"
#include <windows.h>

/////////////////////////////////////////////////////////////////////////////
// Dialog
ABOUTBOX DIALOG DISCARDABLE 32, 32, 180, 100
STYLE DS_MODALFRAME | WS_POPUP
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,66,80,50,14
ICON "ABOUT1",IDC_STATIC,7,7,21,20
CTEXT "About1",IDC_STATIC,40,12,100,8
CTEXT "About Box Demo Program",IDC_STATIC,7,40,166,8
CTEXT "(c) Charles Petzold, 1998",IDC_STATIC,7,52,166,8
END

//-----------------------------------------------------
//resource.h(非常简单)
#define IDM_APP_ABOUT 40001
#define IDC_STATIC -1

//-----------------------------------------------------
//主程序里的代码片断(WndProc函数):
case WM_HOTKEY:
{
if (wParam == ID_HOTKEY)
{
MessageBox(NULL, "test", "", MB_ICONINFORMATION | MB_OK);
DialogBox(hInstance, TEXT("AboutBox"), hwnd, AboutDlgProc);
}
}
return 0;


现在我按快捷键,MessageBox可以正常弹出,说明代码执行到了,但是DialogBox始终没弹出。编译方法我上面已经说了。
ljianq 2003-10-17
  • 打赏
  • 举报
回复
我以前用BC3.1创建对话框(Win3.1的)时,记得是这样的。
ljianq 2003-10-17
  • 打赏
  • 举报
回复
你也需要用代码创建对话框,建立消息循环和窗口过程。
jiangchun_xn 2003-10-17
  • 打赏
  • 举报
回复
没用过了,帮你 up
TopCat 2003-10-17
  • 打赏
  • 举报
回复
不能提前?那我up一下好了

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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