???
解决方案 »
- win32 应用程序使用cdc
- 怎么让CStatic或CButton既垂直居中,又可以自动换行
- Debug和Release结果不一样是怎么回事
- 对话框框架怎么与控件一起最大化
- 新手关于VC 6.0的问题,各位帮忙
- 关于CSocket的Close()函数的问题
- 讨论下,能否象动态创建控件一样动态创建函数呢???
- 要在WINDOWS环境中做一个俄罗斯方块的游戏,该怎么作呀,给个思路。多谢。
- -------------- BSTR 与 LPSTR、LPCTSTR 之间如何互换? --------------
- 还是刚才那个MDI程序的问题
- 关于bcgcontrolbar使用中scrollview出错的问题
- 一个关于虚拟桌面到一个窗口的难题, 请提供线索。
x,y为屏幕坐标
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnMouseMove(nFlags, point);
}
直接用GetPixel(),其原形为COLORREF GetPixel(
POINT point
) const;,其中的参数point可以直接用函数OnMouseMove中的point
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("WhatClr") ;
HWND hwnd ;
int cxWindow, cyWindow ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
FindWindowSize (&cxWindow, &cyWindow) ;
hwnd = CreateWindow (szAppName, TEXT ("What Color"),
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_BORDER,
CW_USEDEFAULT, CW_USEDEFAULT,
cxWindow, cyWindow,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}void FindWindowSize (int * pcxWindow, int * pcyWindow)
{
HDC hdcScreen ;
TEXTMETRIC tm ;
hdcScreen = CreateIC (TEXT ("DISPLAY"), NULL, NULL, NULL) ;
GetTextMetrics (hdcScreen, &tm) ;
DeleteDC (hdcScreen) ;
* pcxWindow = 2 * GetSystemMetrics (SM_CXBORDER) +
12 * tm.tmAveCharWidth ; * pcyWindow = 2 * GetSystemMetrics (SM_CYBORDER) +
GetSystemMetrics (SM_CYCAPTION) +
2 * tm.tmHeight ;
}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static COLORREF cr, crLast ;
static HDC hdcScreen ;
HDC hdc ;
PAINTSTRUCT ps ;
POINT pt ;
RECT rc ;
TCHAR szBuffer [16] ;
switch (message)
{
case WM_CREATE:
hdcScreen = CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL) ;
Rectangle(hdcScreen,100,100,500,500); SetTimer (hwnd, ID_TIMER, 100, NULL) ;
return 0 ; case WM_DISPLAYCHANGE:
DeleteDC (hdcScreen) ;
hdcScreen = CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL) ;
return 0 ; case WM_TIMER:
GetCursorPos (&pt) ;
cr = GetPixel (hdcScreen, pt.x, pt.y) ;
if (cr != crLast)
{
crLast = cr ;
InvalidateRect (hwnd, NULL, FALSE) ;
}
return 0 ;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd, &rc) ;
wsprintf (szBuffer, TEXT (" %02X %02X %02X "),
GetRValue (cr), GetGValue (cr), GetBValue (cr)) ;
DrawText (hdc, szBuffer, -1, &rc,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
DeleteDC (hdcScreen) ;
KillTimer (hwnd, ID_TIMER) ;
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}