SDI程序总是没运行出任何结果!请大家务必帮个忙

lixang000 2008-06-21 01:27:02
//各位朋友:
//真的好郁闷:我写第一个SDI程序总是没任何结果!请大家务必帮个忙!
//以下是原程序:



//这是一个画五变形的SDI程序:
#include <windows.h>
#include <tchar.h>
#include <string>
#include <cmath>

using namespace std;
const double Pi=3.1415926;

long WINAPI WndProc(HWND hWnd,UINT uMsg,WPARAM wParam, LPARAM lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
if(!InitWindowsClass(hInstance)) return FALSE;
if(!InitWindows(hInstance,nCmdShow)) return FALSE;
MSG Msg;
while(GetMessage(&Msg,NULL,0,0))//必须为空,代表主线程
{
TranslateMessage(&Msg); DispatchMessage(&Msg);
}
return Msg.wParam;
}
long WINAPI WndProc(HWND hWnd,UINT uMsg,WPARAM wParam, LPARAM lParam)
{
HDC hDc; HBRUSH hBrush; HPEN hPen; PAINTSTRUCT pt_Struct;
double _radious=100.0, radious; POINT pt[5],_pt[5],Tri[3];
radious=_radious*sin(0.1*Pi)/sin(126.0/180*Pi);
for(int i=0;i<5;++i)
{
pt[i].y=pt[i].x=(long)(_radious*cos(i*72.0/180*Pi));
_pt[i].y=_pt[i].x=(long)(_radious*cos(i*72.0/180*Pi+36.0/180*Pi));
}
switch(uMsg)
{
case WM_PAINT:
hDc=BeginPaint(hWnd,&pt_Struct);
SetMapMode(hDc,MM_ANISOTROPIC); //设置映射模式!
SetWindowOrgEx(hDc,-100,-100,NULL); //设置坐标原点!
hPen=CreatePen(PS_SOLID,1,RGB(0,255,0));
SelectObject(hDc,hPen);
Polygon(hDc,pt,5);
for(int i=0;i<5;++i)
{
Tri[0]=pt[i%5]; Tri[1]=_pt[i%5]; Tri[2]=pt[(i+1)%5];
hBrush=CreateSolidBrush(RGB(i*10,i*20,i*30));
SelectObject(hDc,hBrush);
Polygon(hDc,Tri,3);
Tri[2]=_pt[(1+4)%5];
hBrush=CreateSolidBrush(RGB(i*40,i*30,i*20));
SelectObject(hDc,hBrush);
Polygon(hDc,Tri,3);
}
hBrush=CreateSolidBrush(RGB(255,255,255));
SelectObject(hDc,hBrush);
Polygon(hDc,_pt,5);
MoveToEx(hDc,pt[0].x,pt[0].y,NULL);
for(int i=0;i<5;++i)
{
hPen=CreatePen(PS_SOLID,1,RGB(0,i*51,0));
SelectObject(hDc,hPen);
LineTo(hDc,pt[(i+2)%5].x,pt[(i+2)%5].y);
}
hPen=(HPEN)(GetStockObject(PS_SOLID));
DeleteObject(hPen);DeleteObject(hBrush);
EndPaint(hWnd,&pt_Struct);
return 0;
case WM_DESTROY: PostQuitMessage(WM_QUIT); return 0;
default: return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
}

BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
{
HWND hWnd;
hWnd=CreateWindow( _T("Polygon"), _T("五边形"),
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
if(!hWnd) return FALSE;
//hWndMain=hWnd;//????
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
BOOL InitWindowsClass(HINSTANCE hInstance)
{
WNDCLASS wc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance=hInstance;
wc.lpfnWndProc=WndProc;
wc.lpszClassName= _T("Polygen");
wc.lpszMenuName=NULL;
wc.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClassW(&wc);
}

运行后无任何错误!
但是我按下Ctrl+F5后,过了3个小时无任何结果!然后我试了好多办法都不行,希望大家帮忙!
运行环境VS2005->工程->Win32->Windows应用程序!


...全文
59 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixang000 2008-06-21
  • 打赏
  • 举报
回复
vecri:
谢谢你:
问题基本解决了!
lixang000 2008-06-21
  • 打赏
  • 举报
回复
谢谢你的帮助!

注释掉
//SetMapMode(hDc,MM_ANISOTROPIC); //设置映射模式!
// SetWindowOrgEx(hDc,-100,-100,NULL); //设置坐标原点!
按下Ctrl+F5后!

------ 已启动生成: 项目: 000000, 配置: Debug Win32 ------
正在编译...
00000000.cpp
c:\documents and settings\administrator\桌面\sdk\000000\000000\00000000.cpp(21) : warning C4244: “return”: 从“WPARAM”转换到“int”,可能丢失数据
c:\documents and settings\administrator\桌面\sdk\000000\000000\00000000.cpp(69) : warning C4244: “return”: 从“LRESULT”转换到“long”,可能丢失数据
c:\documents and settings\administrator\桌面\sdk\000000\000000\00000000.cpp(71) : warning C4715: “WndProc”: 不是所有的控件路径都返回值
正在编译资源清单...
正在链接...
正在嵌入清单...
生成日志保存在“file://c:\Documents and Settings\Administrator\桌面\SDK\000000\000000\Debug\BuildLog.htm”
000000 - 0 个错误,3 个警告
========== 生成: 1 已成功, 0 已失败, 0 最新, 0 已跳过 ==========
| 这是一个竖线一闪一闪!(等了1分钟!还是什么都看不到!)
以上现象跟与原来一摸一样!

希望大家在你们的机器上运行以下看能看到什么不?


vecri 2008-06-21
  • 打赏
  • 举报
回复
你注册的窗口类是Polygen
wc.lpszClassName= _T("Polygen");
你建窗口的时候
CreateWindow( _T("Polygon"), _T("五边形"),
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
。。两个窗口类名应该一样!!!
CreateWindow( _T("Polygen"), _T("五边形"),
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
菜牛 2008-06-21
  • 打赏
  • 举报
回复
3个小时?你真有耐心。

先把映射模式去掉试试看。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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