鱼C论坛

 找回密码
 立即注册
查看: 1768|回复: 4

新人求助WINDOWS编程SYSMETS程序

[复制链接]
发表于 2013-10-9 04:37:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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;
        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_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[10];
        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
[i].szLabel, lstrlen (systemtrics[i].szLabel));

                        TextOut (hdc, x + 22 * cxCaps, y,
                                     susmetrics
[i].szDesc, lstrlen(sysmetrics[i]. 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:
[/i][/i][/i][/i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-9 08:15:59 | 显示全部楼层
在学习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 [0]))
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.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-10 03:42:22 | 显示全部楼层
谢谢这位版主。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-10 09:16:33 | 显示全部楼层
看看,呵呵。谢谢了啊。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-8 09:23:06 | 显示全部楼层
谢谢啊!!!!!!!原来得“”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 04:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表