怎样在C++Builder下使用纯粹的win32API编程

WJM 2000-07-12 08:42:00
我刚买了本WindowsAPI编程书,想上机调试书上的例程,请问在C++Builder下怎样跳过vcl而直接用c在API的基础上编程?
...全文
246 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hnxrm 2001-01-01
  • 打赏
  • 举报
回复
......
BCB 2001-01-01
  • 打赏
  • 举报
回复
在20世纪的最后一个晚上,O发觉了编制纯API的C程序
步骤,VCL构架使用简单但代码庞大,一个仅有一个Form1的VCL
程序编译后将产生300K的肥胖目标,如果不用VCL库,仅利用MS
API编制的C++程序所产生的目标将只有8K, 嘿嘿! 瘦得已皮包
骨头,不过,比只有一层皮的 CIH 还胖7倍;

产生无VCL的纯API C++BUILDER 程序步骤:

1.进入C++BUILDER 5.0,关闭缺省工程: File -> Close All;
2.选 File -> New ... -> Console Wizard 进入控制台向导;
3.弹出参数框中,Source Type 选C++,
Use VCL, Multi Threaded, Console Application 三行都
不要选中;
选中Specify project source,且填上工程名: TestAPI
4.点OK后,选中Create a new Unit,将Unit1.cpp内容全清除,
将下列框架粘贴上;
5.存盘,工程名存成TestApi.bpr,运行,产生8kb的目标
TestApi.exe

// Unit1.cpp内容,是个基本架子,跟早期的 VC++1.0 的程序完全
一样

#define STRICT
#include <windows.h>
#pragma hdrstop

LRESULT FAR PASCAL __export WndProc(HWND,UINT,WPARAM,LPARAM);

int PASCAL WinMain(HINSTANCE hInstance, //实例句柄
HINSTANCE hPrevInstance, //前一实例句柄,仅用于16位win
LPSTR lpszCmd, //命令行串
int nCmdShow ) //显示窗口标志
{
static char AppName[]="HelloWorld";
HWND hwnd;
MSG msg;
WNDCLASS wndclass; // 窗口类对象
if (!hPrevInstance) // 若前一实例不存在
{
wndclass.style = CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc =(WNDPROC)WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = 0;
wndclass.lpszClassName = AppName;

RegisterClass(&wndclass); // 为CreateWindow() 注册一个窗口类
}
hwnd=CreateWindow(AppName,"Hello World",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,SW_NORMAL); // 显示窗口
while (GetMessage(&msg,NULL,0,0)) //取消息,有返true
{
TranslateMessage(&msg); // 虚拟键消息转成字符消息
DispatchMessage(&msg); // 转发消息
}
return(msg.wParam);
}

LRESULT FAR PASCAL __export
WndProc(HWND hwnd, // 窗口句柄
UINT message, // 消息句柄
WPARAM wParam , // 消息首参
LPARAM lParam) // 消息次参
{ // 处理消息的回调函数
switch (message)
{
case WM_PAINT:
{
char text[]="Hello World!";
PAINTSTRUCT ps;
BeginPaint(hwnd,&ps);
TextOut(ps.hdc,20,20,text,13);
EndPaint(hwnd,&ps);
break;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return(0);
}
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return(0);
}
APIer 2000-08-02
  • 打赏
  • 举报
回复
TWOY2000讲的很有道理,我在BCB5上试过,选控制台程序,不要VCL支持,不选SONSOLE悬想,然后新建CPP和H文件,直接就可以想VC一样写API程序,一个标准的窗口40K,比VC的要小一点,但比LCC的又大一点,BORLAND的编译器真的不错哦,欢迎到我的主页去看看,里面有一些BCB和BC的东东http://calfsoft.51.net
twoy2000 2000-07-12
  • 打赏
  • 举报
回复
选择New/Console Wizard/选择用C,然后添加必要的头文件,
如Windows.h等.
halfdream 2000-07-12
  • 打赏
  • 举报
回复
BCB 编译能力相当强,
就象twoy2000说的那样比较方便。
或者你干脆进入DOS方式,
命令行方式编译
bcc32 -tWxxx xxx.cpp

bcc32 xxx.cpp

LaoZheng 2000-07-12
  • 打赏
  • 举报
回复
那你用VC,bc5.0
hoyle 2000-07-12
  • 打赏
  • 举报
回复
直接用就可以了,必要时包含一些Windows头文件
wu_xin 2000-07-12
  • 打赏
  • 举报
回复
在VCL的包含内大部分的API真接使用好了!比如MessageBox(...)实际就是的调用!

1,221

社区成员

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

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