社区
资源
帖子详情
API 占CPU 资源问题
sunlau29
2007-11-29 10:03:41
最近开始学习Windows API 编程。写了一个很简单的API,就是在WinProc 里面用 WM_PAINT 在窗口上显示一副小图片,但是这个窗口一打开CPU占用率 就高达90%。请问各位API高手,应该怎么去改进? 如果可以,请告诉我直接的方法,不要叫我去翻《windows程序设计》。
...全文
125
15
打赏
收藏
API 占CPU 资源问题
最近开始学习Windows API 编程。写了一个很简单的API,就是在WinProc 里面用 WM_PAINT 在窗口上显示一副小图片,但是这个窗口一打开CPU占用率 就高达90%。请问各位API高手,应该怎么去改进? 如果可以,请告诉我直接的方法,不要叫我去翻《windows程序设计》。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunlau29
2007-12-04
打赏
举报
回复
谢谢你,12楼,但是我把你的程序直接建立一个新工程运行,报错了
Compiling...
main.cpp
E:\MyGames\ES1\main.cpp(47) : error C2065: 'brvbarCS_VREDRAW' : undeclared identifier
Error executing cl.exe.
ES1.exe - 1 error(s), 0 warning(s)
feng1976
2007-12-04
打赏
举报
回复
不客气
对给我发几分,哈哈
sunlau29
2007-12-04
打赏
举报
回复
谢谢9楼,你的方法最好,把我的绘图代码放到beiginPaint 和EndPain之间,资源问题就解决了,谢谢
ZiSheng
2007-12-02
打赏
举报
回复
to6,7楼;
不愿回答问题就请不要说没用的话
ZiSheng
2007-12-02
打赏
举报
回复
#include <stdlib.h>
#include <windows.h>
HBITMAP hBitmap;
extern HINSTANCE hInst;
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance;
hWnd = CreateWindow("MYBMPDIAG",
"BMPDIAG",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
800,
800, //标题栏高三十
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "MYBMPDIAG";
wcex.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
return RegisterClassEx(&wcex);
}
HINSTANCE hInst;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
//HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,"BMP/u1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE |LR_CREATEDIBSECTION);
MyRegisterClass(hInstance);
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
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;
HDC hdcmem;
RECT rect2;
GetClientRect(hWnd,&rect2);
static int nBmpX,nBmpY;
static HBITMAP hBitmap;
BITMAP bmp;
PAINTSTRUCT ps;
HINSTANCE hInstance;
int result;
switch (message)
{
case WM_CREATE:
hInstance=((LPCREATESTRUCT)lParam)->hInstance;
hBitmap=(HBITMAP)::LoadImage(hInstance,"BMP/19.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
result =GetObject(hBitmap,sizeof(bmp),&bmp);
nBmpX=bmp.bmWidth;
nBmpY=bmp.bmHeight;
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
hdcmem=CreateCompatibleDC(hdc);
SelectObject(hdcmem,hBitmap);
// mydc=GetDC(hWnd);
// RECT rect2;
// GetClientRect(hWnd,&rect2);
BitBlt(hdc,0,0,nBmpX,nBmpY,hdcmem,0,0,SRCCOPY);
DeleteDC(hdcmem);
// ReleaseDC(hWnd,mydc);
// ReleaseDC(hWnd,hdc);
EndPaint(hWnd,&ps);
return 0;
case WM_CLOSE:
DeleteObject(hBitmap);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
以上程序在我的机器上运行成功
ZiSheng
2007-12-02
打赏
举报
回复
wcex.hbrBackground = NULL;//(HBRUSH)(COLOR_WINDOW+1);
这里是主要的问题所在
feng1976
2007-12-01
打赏
举报
回复
绘制部分要这样写
LRESULT APIENTRY WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, "Hello, Windows!", 15);
EndPaint(hwnd, &ps);
return 0L;
// Process other messages.
}
}
sunlau29
2007-12-01
打赏
举报
回复
如果要正确实现我需要的效果,那应该如何写?
feng1976
2007-11-30
打赏
举报
回复
^_^
只知其然,不知其所以然啊
jameshooo
2007-11-30
打赏
举报
回复
天哪,LoadImage会被调用无数次。
WM_PAINT消息处理过程比较乱。
DC用得不正确。
总之,问题不打一处来。
sunlau29
2007-11-30
打赏
举报
回复
#include <stdlib.h>
#include <windows.h>
extern HINSTANCE hInst;
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance;
hWnd = CreateWindow("MYBMPDIAG",
"BMPDIAG",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
300,
200+30, //标题栏高三十
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW| CS_OWNDC;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = NULL;//(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "MYBMPDIAG";
wcex.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
return RegisterClassEx(&wcex);
}
HINSTANCE hInst;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
MyRegisterClass(hInstance);
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
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;
HDC mydc;
RECT rect2;
GetClientRect(hWnd,&rect2);
int nBmpX;
int nBmpY;
HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,"BMP/U1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
BITMAP bmp;
switch (message)
{
case WM_COMMAND:
break;
case WM_PAINT:
{
GetObject(hBitmap,sizeof(bmp),&bmp);
nBmpX=bmp.bmWidth;
nBmpY=bmp.bmHeight;
hdc=CreateCompatibleDC(NULL);
SelectObject(hdc,hBitmap);
mydc=GetDC(hWnd);
StretchBlt(mydc,0,0,rect2.right,rect2.bottom,hdc,0,0,nBmpX,nBmpY,SRCCOPY);
ReleaseDC(hWnd,mydc);
break;
}
case WM_CLOSE:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
stivenjia
2007-11-30
打赏
举报
回复
你连个代码都不告诉我,我怎么能知道为什么能占如此多的资源
jameshooo
2007-11-30
打赏
举报
回复
贴代码上来看看
Pipi0714
2007-11-30
打赏
举报
回复
看不到代码如何改?
zaodt
2007-11-30
打赏
举报
回复
看不到,怎么改?
易语言取进程
CPU
占
用率源码
取进程
CPU
占
用率纯源码,包括取
CPU
核数(可用作绑定
CPU
)。@xiaoxiaofengye。
淘宝商城精仿 淘宝客专业程序(免费版).rar
比较上一个版本优化了开启缓存
CPU
资源
的
占
用 打开速度更快 屏蔽IDC不允许使用的分类 上传前先把文件夹template里面的taodi里面的header.php和index.php文件 把http://www.tao350.com域名换成您的域名,mm_...
sigar-sigar-1.6.4.tar.gz
6 进程信息 包括每个进程的内存
CPU
占
用数 状态 参数 句柄 7 IO信息 包括IO的状态 读写大小等 8 服务状态信息 9 系统信息 包括操作系统版本 系统
资源
限制情况 系统运行时间以及负载 JAVA的版本信息等 ">开源工具包 ...
facebook牛逼的图片加载工具Fresco
它负责从网络,从本地文件系统,本地
资源
加载图片。为了最大限度节省空间和
CPU
时间,它含有3级缓存设计(2级内存,1级文件)。 Fresco 中设计有一个叫做 Drawees 模块,方便地显示loading图,当图片不再显示在屏幕...
OpenHardwareMonitor-v0.9.5-code.zip
Open Hardware Monitor是一款使用C#开发的开源软件,本
资源
为C#源码。可以实时检测并显示电脑重要部件温度的软件。除此之外它还可以显示风扇转速、电压、内存、GPU、
CPU
负载和时钟频率等信息。 官网地址:...
资源
2,586
社区成员
18,441
社区内容
发帖
与我相关
我的任务
资源
VC/MFC 资源
复制链接
扫一扫
分享
社区描述
VC/MFC 资源
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章