新人求助WINDOWS编程SYSMETS程序
本帖最后由 wolaicici 于 2013-10-9 04:40 编辑# include <windows.h>
# include "sysmets.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("SysMets3");
HWND hwnd;
MSG msg;
WNDCLASSwndclass;
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_HREDRAW | CS_VREDRAW;
if (!RegisterClass (&wndclass))
{
MessageBox(NULL, TEXT("Program requires Windows NT!"),
szAppName, MB_ICONERROR);
return 0;
}
hwnd = CreateWindow (szAppName, TEXT ("Get System Metrics No.3"), WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
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 int cxChar, cxCaps, cyChar, cxClient, cyClient, iMaxWidth;
HDC hdc;
int i, x, y, iVertPos, iHorzPos, iPaintBeg, iPaintEnd;
PAINTSTRUCT ps;
SCROLLINFO si;
TCHAR szBuffer;
TEXTMETRIC tm;
switch (message)
{
case WM_CREATE:
hdc = GetDC (hwnd);
GetTextMetrics (hdc, &tm);
cxChar = tm.tmAveCharWidth;
cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
cyChar = tm.tmHeight + tm.tmExternalLeading;
ReleaseDC (hwnd, hdc);
iMaxWidth = 40 * cxChar + 22 * cxCaps;
return 0;
case WM_SIZE:
cxClient = LOWORD (lParam);
cyClient = HIWORD (lParam);
si.cbSize = sizeof (si);
si.fMask= SIF_RANGE | SIF_PAGE;
si.nMin = 0;
si.nMax = NUMLINES - 1;
si.nPage=cxClient / cyChar;
SetScrollInfo (hwnd, SB_HORZ, &si, TRUE);
return 0;
case WM_VSCROLL:
si.cbSize = sizeof (si);
si.fMask= SIF_ALL;
GetScrollInfo (hwnd, SB_VERT, &si);
iVertPos = si.nPos;
switch (LOWORD (wParam))
{
case SB_TOP:
si.nPos = si.nMin;
break;
case SB_BOTTOM:
si.nPos = si.nMax;
break;
case SB_LINEUP:
si.nPos -= 1;
break;
case SB_LINEDOWN:
si.nPos += 1;
break;
case SB_PAGEUP:
si.nPos += 1;
break;
case SB_PAGEUP:
si.nPos -= si.nPage;
break;
case SB_PAGEDOWN:
si.nPos += si.nPage;
break;
case SB_THUMBTRACK:
si.nPos = si.nTrackPos;
break;
default:
break;
}
si.fMask = SIF_Pos;
{
ScrollWindow (hwnd, 0, cyChar * (iVertPos - si.nPos), NULL, NULL);
UpdateWindow (hwnd);
}
return 0;
case WM_HSCROLL:
si.cbSize = sizeof (si);
si.fMask = SIF_ALL;
GetScrollInfo (hwnd, SB_HORZ, &si);
iHorzPos = si.nPos;
switch (LOWORD (wParam))
{
case SB_LINELEFT:
si.nPos -= 1;
break;
case SB_LINERIGHT:
si.nPos += 1;
break;
case SB_PAGELEFT:
si.nPos -= si.nPage;
break;
case SB_PAGERIGHT:
si.nPos += si.nPage;
break;
default:
break;
}
si.fMask = MIF_POS;
SetScrollInfo (hwnd, SB_HORZ, &si, TRUE);
GetScrollInfo (hwnd, SB_HORZ, &si);
if (si.nPos != iHorzPos)
{
ScrollWindow (hwnd, cxChar * (iHorzPos - si.nPos), 0, NULL, NULL);
}
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
si.cbSize = sizeof (si);
si.fMask= SIF_POS;
GetScrollInfo (hwnd, SB_VERT, &si);
iVertPos = si.nPos;
GetScrollInfo (hwnd, SB_HORZ, &si);
iHorzPos = si.nPos;
iPaintBeg = max (0, iVertPos + ps.rcPaint.top / cyChar);
iPaintEnd = min (NUMLINE - 1, iVertPos + ps.rcPaint.bottom / cyChar);
for (i=iPaintBeg; i <= iPaintEnd; i++)
{
x = cxChar * (i - iHorzPos);
y = cyChar * (i - iVertPos);
TextOut (hdc, x, y, sysmetrics.szLabel, lstrlen (systemtrics.szLabel));
TextOut (hdc, x + 22 * cxCaps, y,
susmetrics.szDesc, lstrlen(sysmetrics. szDesc));
SetTextAlign (hdc, TA_RIGHT | TA_TOP);
TextOut (hdc, x + 22 * cxCaps + 40 * cxChar, y, szBuffer,
wsprintf(szBuffer, TEXT("%5d"), GetSystemMetrics (sysmetrics.iIndex)));
SetTextAlign (hdc, TA_LEFT | TA_TOP);
}
EndPaint (hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage (0);
return 0;
}
return DefWindowProc (hwnd, message, wParam, lParam);
}
大家好,以上是小生从windows程序设计的书里敲过来的,但下面给的错误让小生一直参不透,若有高手指点一二,万分感谢。
--------------------Configuration: SYSMETS3 - Win32 Debug--------------------
Compiling...
SYSMETS3.CPP
d:\program files\microsoft visual studio\myprojects\sysmets3\sysmets3.cpp(2) : fatal error C1083: Cannot open include file: 'sysmets.h': No such file or directory
执行 cl.exe 时出错.
SYSMETS3.OBJ - 1 error(s), 0 warning(s)
小生在百度找的答案是
“呵呵,这个问题很多人问过,蛮经典了。看书的额时候认真点撒,在windows程序设计的前半部分有这个文件的代码.复制它,命名为 'sysmets.h 然后 #include "sysmets.h "”。
其具体的步骤还是不会做。。。。:dizzy: 在学习windows编程时,在参考教程上的程序例时,可能都遇到过类似问题。实际上这是一个需要自己创建的头文件。在windows程序设计的前半部分有这个文件的代码,复制它,命名为'sysmets.h,并把它和源代码放到同一目录下,然后#include"sysmets.h"即可。(注意不是#include<sysmets.h>)
这个问题出现是因为sysmets.h不是VC或SDK的头文件。
首先建立头文件sysmets.h。代码如下:// SysMets.h 头文件
#define NUMLINES ((int) (sizeof sysmetrics / sizeof sysmetrics ))
struct
{
int iIndex;
TCHAR * szLabel;
TCHAR * szDesc;
}
sysmetrics [] =
{
SM_CXSCREEN, TEXT ("SM_CXSCREEN"), TEXT ("Screen width in pixels"),
SM_CYSCREEN, TEXT ("SM_CYSCREEN"), TEXT ("Screen height in pixels"),
SM_CXVSCROLL, TEXT ("SM_CXVSCROLL"), TEXT ("Vertical scroll width"),
SM_CYHSCROLL, TEXT ("SM_CYHSCROLL"), TEXT ("Horizontal scroll height"),
SM_CYCAPTION, TEXT ("SM_CYCAPTION"), TEXT ("Caption bar height"),
SM_CXBORDER, TEXT ("SM_CXBORDER"), TEXT ("Window border width"),
SM_CYBORDER, TEXT ("SM_CYBORDER"), TEXT ("Window border height"),
SM_CXFIXEDFRAME,TEXT ("SM_CXFIXEDFRAME"), TEXT ("Dialog window frame width"),
SM_CYFIXEDFRAME,TEXT ("SM_CYFIXEDFRAME"), TEXT ("Dialog window frame height"),
SM_CYVTHUMB, TEXT ("SM_CYVTHUMB"), TEXT ("Vertical scroll thumb height"),
SM_CXHTHUMB, TEXT ("SM_CXHTHUMB"), TEXT ("Horizontal scroll thumb width"),
SM_CXICON, TEXT ("SM_CXICON"), TEXT ("Icon width"),
SM_CYICON, TEXT ("SM_CYICON"), TEXT ("Icon height"),
SM_CXCURSOR, TEXT ("SM_CXCURSOR"), TEXT ("Cursor width"),
SM_CYCURSOR, TEXT ("SM_CYCURSOR"), TEXT ("Cursor height"),
SM_CYMENU, TEXT ("SM_CYMENU"), TEXT ("Menu bar height"),
SM_CXFULLSCREEN,TEXT ("SM_CXFULLSCREEN"), TEXT ("Full screen client area width"),
SM_CYFULLSCREEN,TEXT ("SM_CYFULLSCREEN"), TEXT ("Full screen client area height"),
SM_CYKANJIWINDOW,TEXT ("SM_CYKANJIWINDOW"), TEXT ("Kanji window height"),
SM_MOUSEPRESENT, TEXT ("SM_MOUSEPRESENT"), TEXT ("Mouse present flag"),
SM_CYVSCROLL, TEXT ("SM_CYVSCROLL"), TEXT ("Vertical scroll arrow height"),
SM_CXHSCROLL, TEXT ("SM_CXHSCROLL"), TEXT ("Horizontal scroll arrow width"),
SM_DEBUG, TEXT ("SM_DEBUG"), TEXT ("Debug version flag"),
SM_CXSMICON, TEXT ("SM_CXSMICON"), TEXT ("Small icon width"),
SM_CYSMICON, TEXT ("SM_CYSMICON"), TEXT ("Small icon height"),
SM_CYSMCAPTION, TEXT ("SM_CYSMCAPTION"), TEXT ("Small caption height"),
SM_CXSMSIZE, TEXT ("SM_CXSMSIZE"), TEXT ("Small caption button width"),
SM_CYSMSIZE, TEXT ("SM_CYSMSIZE"), TEXT ("Small caption button height"),
SM_CXMENUSIZE, TEXT ("SM_CXMENUSIZE"), TEXT ("Menu bar button width"),
SM_CYMENUSIZE, TEXT ("SM_CYMENUSIZE"), TEXT ("Menu bar button height"),
SM_ARRANGE, TEXT ("SM_ARRANGE"), TEXT ("How minimized windows arranged"),
SM_CXMINIMIZED, TEXT ("SM_CXMINIMIZED"), TEXT ("Minimized window width"),
SM_CYMINIMIZED, TEXT ("SM_CYMINIMIZED"), TEXT ("Minimized window height"),
SM_CXMAXTRACK, TEXT ("SM_CXMAXTRACK"), TEXT ("Maximum draggable width"),
SM_CYMAXTRACK, TEXT ("SM_CYMAXTRACK"), TEXT ("Maximum draggable height"),
SM_CXMAXIMIZED, TEXT ("SM_CXMAXIMIZED"), TEXT ("Width of maximized window"),
SM_CYMAXIMIZED, TEXT ("SM_CYMAXIMIZED"), TEXT ("Height of maximized window"),
SM_NETWORK, TEXT ("SM_NETWORK"), TEXT ("Network present flag"),
SM_CLEANBOOT, TEXT ("SM_CLEANBOOT"), TEXT ("How system was booted"),
SM_CXDRAG, TEXT ("SM_CXDRAG"), TEXT ("Avoid drag x tolerance"),
SM_CYDRAG, TEXT ("SM_CYDRAG"), TEXT ("Avoid drag y tolerance"),
SM_SHOWSOUNDS, TEXT ("SM_SHOWSOUNDS"), TEXT ("Present sounds visually"),
SM_CXMENUCHECK, TEXT ("SM_CXMENUCHECK"), TEXT ("Menu check-mark width"),
SM_CYMENUCHECK, TEXT ("SM_CYMENUCHECK"), TEXT ("Menu check-mark height"),
SM_SLOWMACHINE, TEXT ("SM_SLOWMACHINE"), TEXT ("Slow processor flag"),
SM_MIDEASTENABLED, TEXT ("SM_MIDEASTENABLED"), TEXT ("Hebrew and Arabic enabled flag"),
SM_MOUSEWHEELPRESENT,TEXT ("SM_MOUSEWHEELPRESENT"), TEXT ("Mouse wheel present flag"),
SM_XVIRTUALSCREEN, TEXT ("SM_XVIRTUALSCREEN"), TEXT ("Virtual screen x origin"),
SM_YVIRTUALSCREEN, TEXT ("SM_YVIRTUALSCREEN"), TEXT ("Virtual screen y origin"),
SM_CXVIRTUALSCREEN, TEXT ("SM_CXVIRTUALSCREEN"), TEXT ("Virtual screen width"),
SM_CYVIRTUALSCREEN, TEXT ("SM_CYVIRTUALSCREEN"), TEXT ("Virtual screen height"),
SM_CMONITORS, TEXT ("SM_CMONITORS"), TEXT ("Number of monitors"),
SM_SAMEDISPLAYFORMAT, TEXT ("SM_SAMEDISPLAYFORMAT"), TEXT ("Same color format flag")
};而在源文件中写:#include "sysmets.h",而不是:#include <sysmets.h>.此外,网上有些头文件的代码有拼写错误而导致运行出错。在结构struct中的int Index 误写为int iIndex. 谢谢这位版主。。。。{:5_110:} 看看,呵呵。谢谢了啊。。。 谢谢啊!!!!!!!原来得“”
页:
[1]