我一直被这个问题困扰着,而且我发现,只要逻辑坐标系不是x由左向右,y由右向左都不能用LOEGLISH这个函数绘制矩形.下面是我的程序,请高手指正.#include <windows.h> 
HINSTANCE hInstance1;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, 
              PSTR szCmdLine, int iCmdShow) 

hInstance1=hInstance;
static TCHAR szAppName[] = TEXT ("LineDemo") ; 
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 ("Program requires Windows NT!"), 
                    szAppName, MB_ICONERROR) ; 
return 0 ; 

    
hwnd = CreateWindow ( szAppName, TEXT ("Line Demonstration"), 
                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) 

HDC hdc ; 
PAINTSTRUCT ps ; 
    TCHAR szbuffer[90]; 
RECT rect; 
HBRUSH brush;
switch (message) 

          
case WM_PAINT: 
hdc = BeginPaint (hwnd, &ps) ; 
SetMapMode(hdc,MM_ISOTROPIC); 
 SetWindowExtEx (hdc, 1,1, NULL) ; 
 SetViewportExtEx (hdc, 1, -1, NULL) ; 
SetViewportOrgEx(hdc,0,500,NULL);
    SetRect(&rect,100,200,200,100); //这个坐标是无论怎么换,都没有矩形.
brush=CreateHatchBrush (HS_VERTICAL, 0);
SetBrushOrgEx(hdc,0,0,NULL);
    FrameRect(hdc,&rect,brush); 
    //Rectangle(hdc,100,1100,200,200);//同样的坐标,为什么这一句可以画出矩形,上一句却不行呢?FrameRect有什么特别之处导致这种现象? 
EndPaint (hwnd, &ps) ; 
return 0 ; 
          
case WM_DESTROY: 
PostQuitMessage (0) ; 
return 0 ; 

return DefWindowProc (hwnd, message, wParam, lParam) ; 

解决方案 »

  1.   

    rect的值和Rectangle的值不一样啊。
      

  2.   

    我一直被这个问题困扰着,而且我发现,只要逻辑坐标系不是x由左向右,y由右向左都不能用LOEGLISH这个函数绘制矩形.下面是我的程序,请高手指正. 哦,这个写错了,应该是这样的:#include <windows.h> 
    HINSTANCE hInstance1; 
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; 
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                  PSTR szCmdLine, int iCmdShow) 

    hInstance1=hInstance; 
    static TCHAR szAppName[] = TEXT ("LineDemo") ; 
    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 ("Program requires Windows NT!"), 
                        szAppName, MB_ICONERROR) ; 
    return 0 ; 

        
    hwnd = CreateWindow ( szAppName, TEXT ("Line Demonstration"), 
                    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) 

    HDC hdc ; 
    PAINTSTRUCT ps ; 
        TCHAR szbuffer[90]; 
    RECT rect; 
    HBRUSH brush; 
    switch (message) 

              
    case WM_PAINT: 
    hdc = BeginPaint (hwnd, &ps) ; 
    SetMapMode(hdc,MM_ISOTROPIC); 
    SetWindowExtEx (hdc, 1,1, NULL) ; 
    SetViewportExtEx (hdc, 1, -1, NULL) ; 
    SetViewportOrgEx(hdc,0,500,NULL); 
        SetRect(&rect,100,100,200,200); //这个坐标是无论怎么换,都没有矩形. 
    brush=CreateHatchBrush (HS_VERTICAL, 0); 
    SetBrushOrgEx(hdc,0,0,NULL); 
        FrameRect(hdc,&rect,brush); 
        //Rectangle(hdc,100,100,200,200);//同样的坐标,为什么这一句可以画出矩形,上一句却不行呢?FrameRect有什么特别之处导致这种现象? 
    EndPaint (hwnd, &ps) ; 
    return 0 ; 
              
    case WM_DESTROY: 
    PostQuitMessage (0) ; 
    return 0 ; 

    return DefWindowProc (hwnd, message, wParam, lParam) ;