#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("SysMets1") ;
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 ("Get System Metrics No. 1"),
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 ;
PAINTSTRUCT ps ;
RECT rt;
//POINT apt[5]={100,100,100,200,200,300,300,300,400,400};
int i,j;
switch (message)
{
case WM_CREATE:
hdc = GetDC (hwnd) ;
//MoveToEx(hdc,100,100,NULL);//若是没有指定起始位置,那么默认的是从原点(0,0)开始
//LineTo(hdc,500,500);
GetClientRect(hwnd,&rt);
ReleaseDC (hwnd, hdc) ;
return 0 ;case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;
/*MoveToEx(hdc,100,100,NULL);
LineTo(hdc,500,300);*//*MoveToEx(hdc,apt[0].x,apt[0].y,NULL);
Polyline(hdc,apt,5);*/
for(i=0;i<rt.right;i+=100)
{
MoveToEx(hdc,i,0,NULL);
LineTo(hdc,i,rt.bottom);
}
for(j=0;j<rt.bottom;j+=100)
{
MoveToEx(hdc,0,j,NULL);
LineTo(hdc,rt.right,j);}
EndPaint (hwnd, &ps) ;
return 0 ;case WM_DESTROY :
PostQuitMessage (0);
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}我是没么这样画不出网格啊?我就是小想在整个屏幕上画网格?求高手解释

解决方案 »

  1.   

    注意warning:
    warning C4700: local variable 'rt' used without having been initialized
    //
    case WM_PAINT :
    hdc = BeginPaint (hwnd, &ps) ;
    GetClientRect(hwnd,&rt);
      

  2.   

    如果在:
    case WM_CREATE:
    hdc = GetDC (hwnd) ;
    //MoveToEx(hdc,100,100,NULL);//若是没有指定起始位置,那么默认的是从原点(0,0)开始
    //LineTo(hdc,500,500);
    GetClientRect(hwnd,&rt);
    //那么:
    static  RECT rt;//={0,0,600,300};
      

  3.   

    1>. WndProc 每个消息被调一次,
    2>. static RECT rt;表示静态变量,(有专门的地址放这个值),在WM_CREATE(第一次被调用)赋值后就可以在后序的调用中使用。
    3>.如果没有static则变量在堆栈中,你并没有使用第一次被调用赋的值,所以第一次退出后,这个值就消失了,
    4>.等到WM_PAINT时rt又在堆栈产生中,但你没赋值。