| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5728 人关注过本帖
标题:关于人机交互的问题。
取消只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 20楼 smallmoon521
谢谢你的建议。

梅尚程荀
马谭杨奚







                                                       
2012-02-14 13:11
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
下面是我创建一个窗口的代码:
程序代码:
#include <windows.h>
#include <math.h>
#define  NUM  100

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int  WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] =TEXT("拥抱世界");
    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("风光无限好"),  // CreateWindow下波浪线,是整个程序中唯一一处。
                        WS_OVERLAPPENDWINDOW,           /*但是编译出现错误提示是           error C2065: “WS_OVERLAPPENDWINDOW”: 未声明的标识符*/
                        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;
    int     i;
    PAINTSTRUCT ps;
    POINT   apt[NUM];
    RECT rect;

    switch(message)
    {
    case  WM_CREATE:
        PlaySound(TEXT("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC);
        return 0;
    case  WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);
        GetClientRect(hwnd, &rect);
        DrawText(hdc, TEXT("Hello, Windows program design!"), -1, &rect,
                 DT_SINGLELINE | DT_CENTER | DT_VCENTER);
        EndPaint(hwnd, &ps);
        return 0;
    case  WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}
我应该没写错别英文文字吧。

梅尚程荀
马谭杨奚







                                                       
2012-02-14 15:18
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
多了个N。

梅尚程荀
马谭杨奚







                                                       
2012-02-14 16:40
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用pangding在2012-2-14 16:38:47的发言:

我以前一直以为别人提的杨大哥是指老杨,看来是个误会……
杨大哥是B版。

梅尚程荀
马谭杨奚







                                                       
2012-02-14 16:46
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 23楼 smallmoon521
谢谢你。
下面是个写正弦函数的程序,我贴出WndProc()函数,能帮我解释下吗。
程序代码:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)     
{ 
    static int  cxClient, cyClient ;   //  是定义X Y坐标吗?
    HDC         hdc;      
    int         i ;       
    PAINTSTRUCT ps ;                    //  这个结构体指针有什么用?
    POINT       apt [NUM] ;             //  是放点的数组吧。     
    switch (message)      
    {      
       case   WM_SIZE:      
           cxClient = LOWORD (lParam) ; // 这两句什么意思     
           cyClient = HIWORD (lParam) ;       
            return 0 ;                      
       case   WM_PAINT:      
            hdc = BeginPaint (hwnd, &ps) ;                       
            MoveToEx (hdc, 0,cyClient / 2, NULL) ;    // 移到下一个点?为什么要除2
            LineTo   (hdc, cxClient, cyClient / 2) ;   // 为什么只有y除以2?                   
            for (i = 0 ; i < NUM ; i++)       
         {       
             apt[i].x = i * cxClient / NUM ;
             apt[i].y = (int) (cyClient / 2 * (1 - sin (TWOPI * i / NUM))) ;  // 循环确定点的坐标放到数组中?
      
         }                     
            Polyline (hdc, apt, NUM) ;       // 这个函数怎么实现的?
            return 0 ;                     
        case   WM_DESTROY:       
            PostQuitMessage (0) ;      
            return 0 ;       
    }       
    return DefWindowProc (hwnd, message, wParam, lParam) ;       
}
如果要画一个点,一条线段,一个矩形,一个圆该怎么改?

梅尚程荀
马谭杨奚







                                                       
2012-02-14 16:55
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 29楼 闲出屁
真是远在天边近在眼前啊,谢了。收藏先。
不过里面没有对程序代码的流程解说,我还很初级哪。

[ 本帖最后由 有容就大 于 2012-2-14 17:25 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-02-14 17:14
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 30楼 BlueGuy
这样说倒是很形象,希望以后能有所体会。

梅尚程荀
马谭杨奚







                                                       
2012-02-14 17:15
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 38楼 beyondyf
是计算三角形,矩形,圆形的面积吗?

梅尚程荀
马谭杨奚







                                                       
2012-02-14 19:18
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
一个CLASS中的变量竟然在最后面定义。 private double a;
                                    private double b;

梅尚程荀
马谭杨奚







                                                       
2012-02-14 19:35
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
高手继续过招,我们观望学习。
我问下自己的问题先。下面是我改的WndProc函数,画了条直线。
程序代码:
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static  int cxClient, cyClient;
    HDC        hdc;
    int     i;
    PAINTSTRUCT ps;
    POINT   apt[NUM];
    RECT rect;

    switch(message)
    {
    case  WM_CREATE:
        PlaySound(TEXT("SystemStart"), NULL, SND_FILENAME | SND_ASYNC);
        return 0;
    case  WM_SIZE:
        cxClient = LOWORD(lParam); 
        cyClient = HIWORD(lParam);
        return 0;
    case  WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);
        GetClientRect(hwnd, &rect);
        DrawText(hdc, TEXT("Hello, Windows program design!"), -1, &rect,
                 DT_SINGLELINE | DT_CENTER | DT_VCENTER);
        for(i = 0; i < NUM; i++)
        {
            apt[i].x = i * cxClient;
            apt[i].y = i * cyClient;
        }
        Polyline(hdc, apt, NUM);

        EndPaint(hwnd, &ps);
        return 0;
    case  WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}
图片附件: 游客没有浏览图片的权限,请 登录注册


问题是经过   case  WM_SIZE:
        cxClient = LOWORD(lParam);  
        cyClient = HIWORD(lParam);
        return 0;后X Y坐标的初始值是多少?

梅尚程荀
马谭杨奚







                                                       
2012-02-14 20:32
快速回复:关于人机交互的问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021151 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved