请教,windows程序设计第八周章的模拟时钟编译执行后为什么没有刻度???

路口转弯 2013-07-06 04:27:14
这是全部代码,求高手指点。。。
#include <Windows.h>
#include <math.h>

#define ID_TIMER 1
#define TWOPI (2 * 3.14159)

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

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

wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WndProc;
wndclass.lpszClassName = szAppName;
wndclass.lpszMenuName = NULL;
wndclass.style = CS_VREDRAW | CS_HREDRAW;

if (!RegisterClass(&wndclass))
{
return -1;
}

hwnd = CreateWindow(szAppName, TEXT("Analog Clock"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL,
hInstance, NULL);
if (NULL == hwnd)
{
return -1;
}

ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

void SetIsotropic(HDC hdc, int cxClient, int cyClinent)
{
SetMapMode(hdc, MM_ISOTROPIC);
SetWindowExtEx(hdc, 1000, 1000, NULL);
SetViewportExtEx(hdc, cxClient / 2, -cyClinent / 2, NULL);
SetViewportOrgEx(hdc, cxClient / 2, cyClinent / 2, NULL);
}

void RotatePoint(POINT pt[], int iNum, int iAngle)
{
int i;
POINT ptTemp;
for(i = 0; i < iNum; i++)
{
ptTemp.x = (int) (pt[i].x * cos(TWOPI * iAngle / 360) + pt[i].y * sin(TWOPI * iAngle / 360));
ptTemp.y = (int) (pt[i].y * cos(TWOPI * iAngle / 360) - pt[i].x * sin(TWOPI * iAngle / 360));
pt[i] = ptTemp;
}
}

void DrawClock(HDC hdc)
{
int iAngle;
POINT pt[3];

for(iAngle = 0; iAngle < 360; iAngle += 6)
{
pt[0].x = 0;
pt[0].y = 900;

RotatePoint(pt, 1, iAngle);

pt[2].x = pt[2].y = iAngle % 5 ? 33 : 100;

pt[0].x -= pt[2].x / 2;
pt[0].y -= pt[2].y / 2;

pt[1].x = pt[0].x + pt[1].x;
pt[1].y = pt[0].y + pt[1].y;

SelectObject(hdc, GetStockObject(BLACK_BRUSH));
Ellipse(hdc, pt[0].x, pt[0].y, pt[1].x, pt[1].y);
}
}

void DrawHands(HDC hdc, SYSTEMTIME * pst, BOOL fChange)
{
static POINT pt[3][5] = { 0, -150, 100, 0, 0, 600, -100, 0, 0, -150,
0, -200, 50, 0, 0, 800, -50, 0, 0, -200,
0, 0, 0, 0, 0, 0, 0, 0, 0, 800};

int i, iAngle[3];
POINT ptTemp[3][5];

iAngle[0] = (pst->wHour * 30) % 360 + pst->wMinute / 2;
iAngle[1] = pst->wMinute * 6;
iAngle[2] = pst->wSecond * 6;

memcpy(ptTemp, pt, sizeof(pt));

for(i = fChange ? 0 : 2; i < 3; i++)
{
RotatePoint(ptTemp[i], 5, iAngle[i]);
Polyline(hdc, ptTemp[i], 5);
}
}


LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

static int cxClient, cyClient;
static SYSTEMTIME stPrevious;
BOOL fChange;
HDC hdc;
PAINTSTRUCT ps;
SYSTEMTIME st;

switch(message)
{
case WM_CREATE:
SetTimer(hwnd, ID_TIMER, 1000, NULL);
GetLocalTime(&st);
stPrevious = st;
break;
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
break;
case WM_TIMER:
GetLocalTime(&st);
fChange = st.wHour != stPrevious.wHour || st.wMinute != stPrevious.wMinute;

hdc = GetDC(hwnd);

SetIsotropic(hdc, cxClient, cyClient);

SelectObject(hdc, GetStockObject(WHITE_PEN));
DrawHands(hdc, &stPrevious, fChange);

SelectObject(hdc, GetStockObject(BLACK_PEN));
DrawHands(hdc, &st, TRUE);

ReleaseDC(hwnd, hdc);

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

SetIsotropic(hdc, cxClient, cyClient);
DrawClock(hdc);
DrawHands(hdc, &stPrevious, TRUE);
EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
KillTimer(hwnd, ID_TIMER);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}

return 0;
}
...全文
150 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Codning 2013-11-28
  • 打赏
  • 举报
回复
draw clock 里面应该是 pt[1].x=pt[0].x+pt[2].x; pt[1].y=pt[0].y+pt[2].y;
路口转弯 2013-07-06
  • 打赏
  • 举报
回复
这是执行后的结果图片
内容概要:本文提出了一种基于去噪概率扩散模型(DDPM)的电动汽车充电行为场景生成方法,利用Python代码实现,旨在解决实际中电动汽车充电数据稀缺或不完整的问题。该方法通过学习历史充电数据的分布特征,生成高保真、多样化的充电行为场景,有效模拟用户充电的时间、地点、持续时长及功率需求等关键属性。文中详细阐述了DDPM模型的构建流程、训练机制以及生成结果的评估方法,验证了其在捕捉复杂时序模式和随机性方面的优越性能。生成的场景可用于电力系统仿真、电网承载力分析及充电基础设施规划等领域。; 适合人群:具备一定Python编程能力和机器学习基础知识,从事电力系统规划、交通电气化、智慧能源系统等相关方向研究的科研人员与工程师;尤其适用于需要进行负荷建模与场景仿真的研究人员。; 使用场景及目标:①弥补真实充电数据不足,为仿真研究提供丰富、合理的输入场景;②评估高渗透率电动汽车接入对配电网电压、潮流及电能质量的影响;③支持充电站选址、容量配置与需求响应策略的设计与优化;④作为新型负荷预测与电网调度模型的训练与测试数据来源。; 阅读建议:读者应结合所提供的Python代码深入理解DDPM在时序行为生成中的具体实现方式,重点掌握噪声调度、反向扩散过程及条件生成等核心技术细节,并通过调整超参数和输入数据来探究模型对不同充电模式的适应能力,从而更好地将其应用于实际科研与工程项目中。

1,222

社区成员

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

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