首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 请教:为什么我不能在LOEGLISH下用FrameRect绘制矩形? [已结贴,结贴人:frydsh]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • frydsh
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-07-22 12:41:59 楼主
    我一直被这个问题困扰着,而且我发现,只要逻辑坐标系不是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) ;
    }
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lfchen
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-22 13:34:591楼 得分:20
    rect的值和Rectangle的值不一样啊。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • frydsh
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-22 13:47:362楼 得分:0
    我一直被这个问题困扰着,而且我发现,只要逻辑坐标系不是x由左向右,y由右向左都不能用LOEGLISH这个函数绘制矩形.下面是我的程序,请高手指正.

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

    哦,这个写错了,应该是这样的:

    #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) ;
    }
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved