自己做的小程序:) 遇到一点问题

bearocean 2005-09-09 02:17:33
#include <windows.h>

#define ID_TIMER 1


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


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

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


if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("The Program require windows NT"),szAppName,MB_ICONERROR);
return 0;
}

MessageBox(NULL,TEXT("程序由BearOcean编写,用于捕捉鼠标位置的RGB值和色彩"),TEXT("Infomation"),MB_OK);


hwnd=CreateWindow(szAppName,TEXT("GetColor--Writen By BearSea"),
WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER,
CW_USEDEFAULT,CW_USEDEFAULT,
300,100,
NULL,NULL,hInstance,NULL);


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)
{
static HDC hdcScreen;
PAINTSTRUCT ps;
POINT pt;
RECT rc;
static COLORREF cr=RGB(0,0,0),LastCr=RGB(1,0,0);//用于存放颜色信息
HDC hdc;
TCHAR szBuffer1[17];
TCHAR szBuffer2[17];
TCHAR szBuffer[10];
RECT ColorRect={150,0,300,100};
HBRUSH hBrush;
int iLength1;
int iLength2;

HGLOBAL hGlobal;
PTSTR pGlobal ;


switch(message)
{
case WM_CREATE:
GetClientRect(hwnd,&rc);
hdcScreen=CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);//获取屏幕句柄
SetTimer(hwnd,ID_TIMER,100,NULL);
InvalidateRect(hwnd,NULL,TRUE);
return 0;

case WM_TIMER:

GetCursorPos(&pt);//Get Cursor pos
cr=GetPixel(hdcScreen,pt.x,pt.y);

if(cr!=LastCr)
{
InvalidateRect(hwnd,NULL,TRUE);
LastCr=cr;
}

return 0;

case WM_PAINT:

hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rc);
hBrush=CreateSolidBrush(cr);
FillRect(hdc,&ColorRect,hBrush);
iLength1=wsprintf(szBuffer1,TEXT("16:#%02x%02x%02x"),GetRValue(cr),GetGValue(cr),GetBValue(cr));
iLength2=wsprintf(szBuffer2,TEXT("rgb: %4d%4d%4d"),GetRValue(cr),GetGValue(cr),GetBValue(cr));
TextOut(hdc,5,10,szBuffer1,iLength1);
TextOut(hdc,5,30,szBuffer2,iLength2);




EndPaint(hwnd,&ps);
DeleteObject(hBrush);
return 0;

case WM_KEYDOWN:
switch(wParam)
{
case VK_SPACE:
GetCursorPos(&pt);//Get Cursor pos
cr=GetPixel(hdcScreen,pt.x,pt.y);
wsprintf(szBuffer,TEXT("#%02x%02x%02x"),GetRValue(cr),GetGValue(cr),GetBValue(cr));
//------------------------------------
hGlobal = GlobalAlloc (GHND | GMEM_SHARE, (lstrlen (szBuffer) + 1) * sizeof (TCHAR)) ;
pGlobal = GlobalLock (hGlobal) ;
lstrcpy (pGlobal, szBuffer) ;
GlobalUnlock (hGlobal) ;
OpenClipboard (hwnd) ;
EmptyClipboard () ;
SetClipboardData (CF_TEXT, hGlobal) ;
CloseClipboard () ;
MessageBox (NULL, TEXT ("颜色信息已经写入剪贴板 :)"), TEXT ("Action"), 0);
//------------------------------------
//MessageBox (NULL, TEXT ("颜色信息已存入剪贴板"), TEXT ("HelloMsg"), 0);
break;


case VK_F1:
MessageBox(NULL, TEXT ("使用方法:\n鼠标指向要选取的颜色\n按下空格键,颜色值将被写入剪贴板.\n-------------------------------------------------\n写这个是为了方便自己写网页的时候\n获取颜色值。\n-------------------------------------------------\n By BearOcean"), TEXT ("Help"), 0);
break;
}
return 0;






case WM_DESTROY:
DeleteDC(hdcScreen);
KillTimer(hwnd,ID_TIMER);
PostQuitMessage(0);


return 0;

}
return DefWindowProc(hwnd,message,wParam,lParam);
}




这个东西是用TIMER写的,但是用久了就会死掉。始终显示#000000即黑色。
这个是什么原因呢?我是新人:)

.EXE可以在我的Blog下载:http://211.83.110.77/bearsea/archive/2005/05/12/325.aspx
...全文
97 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2005-09-09
  • 打赏
  • 举报
回复
检查一下定时器等
T90 2005-09-09
  • 打赏
  • 举报
回复
运行一段时间死掉,说明与TIMER有关,即使时间上除了问题,可能与killtimer有联系
vcmute 2005-09-09
  • 打赏
  • 举报
回复
GetPixel Remarks
The point must be in the clipping region. If the point is not in the clipping region, the function has no effect and returns –1.

P.S.有GlobalAlloc 没有对应的 GlobalFree
NJHS 2005-09-09
  • 打赏
  • 举报
回复
没有什么问题啊

多长时间后死掉啊?
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

16,472

社区成员

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

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

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