我的这个SDK程序为什么不能显示标题?

dszch 2003-02-12 11:24:13
//我的SDK程序,已调通,为什么不能显示标题?语法我检查了应该没有错误.
//我猜想可能是环境变量的设置问题
//请高手指点
#include <windows.h>
#include <stdio.h>
#include <math.h>

#define MAX_NUM 10000
#define PANE_CONS 100
#define PI 3.1415927

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("HelloWin") ;
HWND hwnd ;
MSG msg ;

////////////////////////建立,注册窗口类
WNDCLASS wc ;
wc.style = CS_HREDRAW | CS_VREDRAW ;
wc.lpfnWndProc = WndProc ;
wc.cbClsExtra = 0 ;
wc.cbWndExtra = 0 ;
wc.hInstance = hInstance ;
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wc.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wc.lpszMenuName = NULL ;
wc.lpszClassName = szAppName ;

//////////////////////注册窗口类
if (!RegisterClass (&wc))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}

/////////////////////(二)创建窗口
hwnd = CreateWindow (szAppName, // window class name
TEXT ("欢迎你的到来!"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters


/////////////////////(三)显示和更新窗口
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;


////////////////////(四)创建消息循环
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}

////////////////////(六)窗口过程

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
static int cxClient,cyClient;
PAINTSTRUCT ps ;
POINT Points[MAX_NUM];
static HPEN hpen1,hpen2,hpen3;
int i;
int x,y;


///////////////////(七)处理消息
switch (message)
{
case WM_CREATE:
// 创建逻辑画笔
hpen1=CreatePen(PS_SOLID,3,RGB(0,0,0)); //实线、3个像素宽、黑色
hpen2=CreatePen(PS_SOLID,1,RGB(255,0,0)); //实线、一个像素宽、红色
hpen3=CreatePen(PS_SOLID,1,RGB(0,0,255)); //实线、一个像素宽、兰色

return 0;

case WM_SIZE:
//获取用户区大小
cxClient=LOWORD(lParam);
cyClient=HIWORD(lParam);
return 0;

case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;

/////绘制坐标网格,使用默认画笔,黑色
for(x=cxClient/PANE_CONS;x<cxClient;x+=cxClient/PANE_CONS)
{
MoveToEx(hdc,x,0,NULL);
LineTo(hdc,x,cyClient);
}

for(y=cyClient/PANE_CONS;y<cyClient;y+=cyClient/PANE_CONS)
{
MoveToEx(hdc,0,y,NULL); //选定直线的起点
LineTo(hdc,cxClient,y); //画直线到终点
}

///////使用画笔hpen1,3像素宽黑笔,画坐标基线X
SelectObject(hdc,hpen1);
MoveToEx(hdc,0,cyClient/2,NULL);
LineTo(hdc,cxClient,cyClient/2);

///////使用画笔hpen1,3像素宽黑笔,画坐标基线y,为明显起见,左移了一个像素
MoveToEx(hdc,1,0,NULL);
LineTo(hdc,1,cyClient);


////////绘制画正弦曲线,使用画笔hpen2,红色
SelectObject( hdc, hpen2 );
for( i = 0; i < MAX_NUM; i++ )
{
Points[i].x = i * cxClient / MAX_NUM;
Points[i].y = (int) (cyClient/2 * (1 - sin( PI * 2 * i / MAX_NUM)) );
}
Polyline( hdc, Points, MAX_NUM );

///////绘制余弦曲线,使用画笔hpen3,兰色
SelectObject(hdc,hpen3);
for( i = 0; i < MAX_NUM; i++ )
{
Points[i].x = i * cxClient / MAX_NUM;
Points[i].y = (int) (cyClient/2 * (1 - cos( PI * 2 * i / MAX_NUM)) );
}
Polyline( hdc, Points, MAX_NUM );


SelectObject(hdc,GetStockObject(BLACK_PEN));
EndPaint (hwnd, &ps) ;
return 0 ;

//////////////////(五)终止应用程序.
case WM_DESTROY:
DeleteObject(hpen1);
DeleteObject(hpen2);

PostQuitMessage (0) ;
return 0 ;
}

return DefWindowProc (hwnd, message, wParam, lParam) ;
}
...全文
29 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
dszch 2003-03-10
  • 打赏
  • 举报
回复
gz
wshcdr 2003-03-04
  • 打赏
  • 举报
回复
gz
dszch 2003-03-03
  • 打赏
  • 举报
回复
up
dszch 2003-03-01
  • 打赏
  • 举报
回复
你是什么系统呀?前面已有朋友说了,在Dev-C++和 VC.NET下编译,豆科仪显示标题!

可是,我在98下就是不行,而且
将程序中的 #define MAX_NUM 10000
改为 #define MAX_NUM 1000
就可以显示标题!真奇怪,程序应该是没有错误了,可是这是什么原因呢?
lchlovely 2003-02-28
  • 打赏
  • 举报
回复
在vc6中,远行你的程序,能显示标题啊,就是“欢迎你的到来!”;
dszch 2003-02-28
  • 打赏
  • 举报
回复
楼上,朋友,谢谢你帮我考虑问题!我按照你说的,调试了,可是没有调通!我也不知怎么修改!
我按照你的意思将
hdc = BeginPaint (hwnd, &ps);
改为
hdc=GetDC(hwnd); //获取用户区对象的设备描述表句柄
。。。。。
ReleaseDC(hwnd,hdc); //还是跟原来一样的 效果。

另我觉得,可能不是你说的原因,因为我
将程序中的 #define MAX_NUM 10000
改为 #define MAX_NUM 1000
程序就可以显示标题了,说明和设备应该没有关系。

但这有是为什么呢?
lchlovely 2003-02-26
  • 打赏
  • 举报
回复
你的hdc = BeginPaint (hwnd, &ps);这里的hdc是整个窗口的设备上下文,它包括窗口的标题和窗口的客户区;所以在你显示标题后被你画的图覆盖掉了,

这样该试试:在WM_PAINT:中去掉 hdc = BeginPaint (hwnd, &ps) ;然后加以下代码;

CRect rc;
GetClientRect(hwnd,&rc);
ps.rcPaint=rc;
hdc = BeginPaint (hwnd, &ps) ;

如果ok或者不ok,通知我;

xike 2003-02-26
  • 打赏
  • 举报
回复
我也想知道!
dszch 2003-02-24
  • 打赏
  • 举报
回复
请高手给解释一下吧!!!!!!!!!!!
dszch 2003-02-21
  • 打赏
  • 举报
回复
这样可以使程序显示标题,但我不知道为什么?请知道的朋友告诉我原因!

将程序中的 #define MAX_NUM 10000
改为 #define MAX_NUM 1000

即10000改为1000

gnawdong 2003-02-16
  • 打赏
  • 举报
回复
ASCII也有吗?呵呵~~~我也没听过。。谁会顺便给我个MESSAGE。谢谢!!!
dszch 2003-02-14
  • 打赏
  • 举报
回复
unicode编译是什么意思?还有ASCII编译吗?

如何知道我用的什么编译?如何改变?

谢谢!
zcpro 2003-02-14
  • 打赏
  • 举报
回复
你是不是用unicode编译的?
dszch 2003-02-14
  • 打赏
  • 举报
回复
高手帮我看看!谢谢
dszch 2003-02-13
  • 打赏
  • 举报
回复
可是我在98下,VC6.0调试不显示标题呀?我也觉得程序没有问题呀?为什么呀?
masterz 2003-02-13
  • 打赏
  • 举报
回复
I build it with Dev-C++, it does display the caption.
it is also compitable with VC.NET.
hegan0024 2003-02-12
  • 打赏
  • 举报
回复
用.NET调了一下可以的标题是"欢迎你的到来"是吗?

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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