初学<<windows程序设计>>,有很多不明白的问题,回贴有分!
1.请问各位前辈,我在看<<windows程序设计>>,很多地方都记不住,是不是真正编写程序时,也不用记住全部的,而只需记住大概,之后查书就可以呢?请说一下学习这本书的窍门,我看到第四章,下面是第四章的一个例题,我看了两遍,才对这几章有点印象,真是不太好记,是否就是死记硬背,在写程序的同时记住它们呢,请各位前辈指教!谈谈您学习时遇到什么麻烦怎么克服的!谢谢!2.解决下面的这个问题!(20分)
这条语句有问题,我检查几遍,没发现什么问题?
for (i = 0 ; i < NUMLINES ; i++)//D:\programing windows\sysmets\sysmets1.c(73) : error C2143: syntax error : missing ')' before ';'//sysmets.h#define NUMLINES ((int)(sizeof sysmetrics/sizeof sysmetrics[0])struct 
{
int index;
TCHAR *szName;
TCHAR *szBornDate;
TCHAR *szHomeTelphone;
TCHAR *szMobile;
TCHAR *szOicq;
TCHAR *szEmail;
TCHAR *szSchool;
}
sysmetrics[]=
{
1,     TEXT("陈欣苗"),
     TEXT("83.7.26"),
    TEXT("7903417"),
    TEXT("13596087374"),
    TEXT("34691419"),
    TEXT("[email protected]"),
    TEXT(""),
2, TEXT("程昊"),
        TEXT("84.1.26"),
TEXT("8540933"),
TEXT("13844170312"),
TEXT("81372452"),
TEXT(""),
TEXT(""),
3, TEXT("曹贺"),
        TEXT("83.8.6"),
TEXT("7936305"),
TEXT(""),
TEXT("465560514"),
TEXT(""),
TEXT("010-65717082"),
4, TEXT("迟亮"),
TEXT("83.7.24"),
TEXT("7933069"),
TEXT("13844040110"),
TEXT("75109487"),
TEXT(""),
TEXT(""),
5, TEXT("陈琦"),
TEXT("84.3.26"),
TEXT("7903231"),
TEXT("13918325484"),
TEXT("46457437"),
TEXT("[email protected]"),
TEXT("021-57123309"),
5, TEXT("陈琦"),
TEXT(""),
TEXT(""),
TEXT(""),
TEXT(""),
TEXT(""),
TEXT("021-64283952家"),
6, TEXT("杜博"),
TEXT("83.10.16"),
TEXT("7810392"),
TEXT("13039109903"),
TEXT(""),
TEXT(""),
TEXT(""),
7, TEXT("高剑"),
TEXT("83.8.20"),
TEXT("7935247"),
TEXT("13180875303"),
TEXT("6961481"),
TEXT(""),
TEXT(""),
8, TEXT("张赢予"),
TEXT("83.3.11"),
TEXT(""),
TEXT("13074312853"),
TEXT("8226407"),
TEXT("[email protected]"),
TEXT(""),
9, TEXT("李芳兰"),
TEXT("83.2.12"),
TEXT("7934528"),
TEXT("13504434294"),
TEXT("29170555"),
TEXT(""),
TEXT(""),
10, TEXT("李爽"),
TEXT("83.10.26"),
TEXT("7819865"),
TEXT("13039203350"),
TEXT(""),
TEXT(""),
TEXT(""),
11, TEXT("彭晓强"),
TEXT("83.4.8"),
TEXT("7944251"),
TEXT("13904466117"),
TEXT(""),
TEXT(""),
TEXT("延边大学"),
12, TEXT("单米楠"),
TEXT("83.1.24"),
TEXT("7961603"),
TEXT(""),
TEXT("14808778"),
TEXT("[email protected]"),
TEXT(""),
13, TEXT("孙爽"),
TEXT("83.2.7"),
TEXT("2919289"),
TEXT("13944126404"),
TEXT(""),
TEXT(""),
TEXT("国际会展中心"),
    14, TEXT("王跃"),
TEXT("82.10.28"),
TEXT("7815790"),
TEXT("13844888316"),
TEXT("12753508"),
TEXT(""),
TEXT("光机所"),
15, TEXT("王关龙"),
TEXT("83.3.15"),
TEXT("7817968"),
TEXT(""),
TEXT("88080222"),
TEXT(""),
TEXT(""),
16, TEXT("魏莱"),
TEXT("83.5.6"),
TEXT("7926616"),
TEXT("13844192253"),
TEXT("9021813"),
TEXT("[email protected]"),
TEXT("新文化报"),
17, TEXT("于浩"),
TEXT("83.5.8"),
TEXT("8566437"),
TEXT(""),
TEXT("11301472"),
TEXT("[email protected]"),
TEXT(""),
18, TEXT("张怡"),
TEXT("83.2.16"),
TEXT("7813996"),
TEXT("13604429330"),
TEXT(""),
TEXT(""),
TEXT(""),
19, TEXT("张爽"),
TEXT("83.3.20"),
TEXT("7935327"),
TEXT("13043308686"),
TEXT("32602737"),
TEXT(""),
TEXT(""),
};
//sysmets1.c#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("Classmate");
HWND hwnd;
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;
} hwnd=CreateWindow(szAppName,TEXT("Classmate Address List"),
WS_OVERLAPPEDWINDOW,
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;
HDC hdc;
int i;
PAINTSTRUCT ps;
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);
return 0;
case WM_PAINT:
    hdc = BeginPaint (hwnd, &ps) ;     for (i = 0 ; i < NUMLINES ; i++)
{
TextOut(hdc,0,cyChar*i,szBuffer,
wsprintf(szBuffer,TEXT("%3d"),
GetSystemMetrics(sysmetrics[i].index)));
TextOut(hdc,4*cxCaps,cyChar*i,
sysmetrics[i].szName,
lstrlen(sysmetrics[i].szName));
TextOut(hdc,14*cxCaps,cyChar*i,
sysmetrics[i].szBornDate,
lstrlen(sysmetrics[i].szBornDate));
//TextOut(hdc,
}
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

解决方案 »

  1.   

    2.
    #define NUMLINES ((int)(sizeof sysmetrics/sizeof sysmetrics[0])
    这句最后少个括号
      

  2.   

    1. 写了若干年程序后, 代码中绝大部分是COPY&PASTE关键在于:
    1) DESGIN
    2) 具体的问题, 知道答案在哪里。
        不知道的, 知道去哪里找答案(例如MSDN,CSDN)。
        然后就是COPY。所以没有任何必要死记。
      

  3.   

    rtdb(东临碣石)看的仔细,呵呵
      

  4.   

    api不需要记住,只需要知道有这个功能,会查就可以了。
      

  5.   

    唉,要160大洋,偶买不起.
    不过我买了深入浅出MFC,才看完了第一章.
    但是很奇怪啊?我没系统学过C++(就是看VC例子里的,不懂),也没看过WINDOWS编程,而且大家推荐也要最后才看这本书.但我看起来觉得很爽啊,我看了几页就觉得我决不会后悔买这本书的.
      

  6.   

    此句有问题:#define NUMLINES ((int)(sizeof sysmetrics/sizeof sysmetrics[0])改为下面的试试:
    #define NUMLINES ((int)(sizeof(sysmetrics)/sizeof(sysmetrics[0])))
      

  7.   

    for (i = 0 ; i < NUMLINES ; i++)这句话应该没有毛病阿,是不是I没有定义阿,要不就是前面写错了东西了。
      

  8.   

    《WINDOWS程序设计》绝对经典!