| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 627 人关注过本帖
标题:求大家帮我看一下程序错在哪?静茹窗口的是鼠标不是箭头,并且程序好像陷入 ...
只看楼主 加入收藏
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:5 
求大家帮我看一下程序错在哪?静茹窗口的是鼠标不是箭头,并且程序好像陷入了死循环
程序代码:
#include"windows.h"
#include"stdio.h"
#include"tchar.h"

LRESULT CALLBACK WndProc(
    HWND hwnd,
    UINT msg,
    WPARAM wparam,
    LPARAM lparam);


int WINAPI WinMain(
  HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTR lpCmdLine,
  int nShowCmd )
{
    BOOL msg_flag;
    MSG msg;
    HWND hwnd;
    WNDCLASS wndcls;

    wndcls.cbClsExtra=0;
    wndcls.cbWndExtra=0;
    wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndcls.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wndcls.hInstance=hInstance;
    wndcls.lpfnWndProc=WndProc;
    wndcls.lpszClassName=_T("C PROGRAM DESIGN");
    wndcls.lpszMenuName=NULL;
    wndcls.style=CS_HREDRAW|CS_VREDRAW;
    RegisterClass(&wndcls);
    hwnd=CreateWindow(_T("C PROGRAM DESIGN"),_T("HELLO 大家好!"),WS_OVERLAPPEDWINDOW,
         CW_USEDEFAULT,0, CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
    ShowWindow(hwnd,SW_NORMAL);
    UpdateWindow(hwnd);
    msg_flag=GetMessage(&msg,hwnd,0,0);
    while(msg_flag)
    {
        if(msg_flag==-1)
            return -1;
        else
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
}

LRESULT CALLBACK WndProc(
    HWND hwnd,
    UINT msg,
    WPARAM wparam,
    LPARAM lparam
)
{
    HDC hdc;
    PAINTSTRUCT ps;

    switch(msg)
    {
    case WM_CHAR:
        MessageBox(hwnd,TEXT("这是对话空"),_T("您好!"),0);
        break;
    case WM_LBUTTONDOWN:
        MessageBox(hwnd,TEXT("这是对话空"),_T("您好!"),0);
        hdc=GetDC(hwnd);
        TextOut(hdc,0,0,_T("这是程序员之家"),strlen("这是程序员之家"));
        ReleaseDC(hwnd,hdc);
        break;
    case WM_PAINT:
        HDC hdc;
        hdc=BeginPaint(hwnd,&ps);
        TextOut(hdc,0,0,_T("这是程序员之家"),strlen("这是程序员之家"));
        EndPaint(hwnd,&ps);
        ReleaseDC(hwnd,hdc);
        break;
    case WM_CLOSE:
        if(IDYES==MessageBox(hwnd,TEXT("是否真的结束?"),_T("message"),MB_YESNO))
            DestroyWindow(hwnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd,msg,wparam,lparam);
    return 0;
    }
}
2015-04-25 21:43
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:7 
我不知道你为什么会死循环,但我能解决:
这个窗体生成的代码本身就有一定问题。用DEV-C++自动生成的窗体代码来执行就不会死循环了。问题出在哪里看不出来,但先治标吧。
#include <windows.h>

/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    HDC hdc;
    PAINTSTRUCT ps;

    switch(Message)
    {
    case WM_CHAR:
        MessageBox(hwnd,TEXT("这是对话空"),TEXT("您好!"),0);
        break;
    case WM_LBUTTONDOWN:
        MessageBox(hwnd,TEXT("这是对话空"),TEXT("您好!"),0);
        hdc=GetDC(hwnd);
        TextOut(hdc,0,0,TEXT("这是程序员之家"),strlen("这是程序员之家"));
        ReleaseDC(hwnd,hdc);
        break;
    case WM_PAINT:
        HDC hdc;
        hdc=BeginPaint(hwnd,&ps);
        TextOut(hdc,0,0,TEXT("这是程序员之家"),strlen("这是程序员之家"));
        EndPaint(hwnd,&ps);
        ReleaseDC(hwnd,hdc);
        break;
    case WM_CLOSE:
        if(IDYES==MessageBox(hwnd,TEXT("是否真的结束?"),TEXT("message"),MB_YESNO))
            DestroyWindow(hwnd);
        break;    case WM_DESTROY: {
            PostQuitMessage(0);
            break;
        }
        
        /* All other messages (a lot of them) are processed using default procedures */
        default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}

/* The 'main' function of Win32 GUI programs: this is where execution starts */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX wc; /* A properties struct of our window */
    HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to our window */
    MSG Msg; /* A temporary location for all messages */

    /* zero out the struct and set the stuff we want to modify */
    memset(&wc,0,sizeof(wc));
    wc.cbSize         = sizeof(WNDCLASSEX);
    wc.lpfnWndProc     = WndProc; /* This is where we will send messages to */
    wc.hInstance     = hInstance;
    wc.hCursor         = LoadCursor(NULL, IDC_ARROW);
   
    /* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = "WindowClass";
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
    wc.hIconSm         = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */

    if(!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","HELLO 大家好!",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, /* x */
        CW_USEDEFAULT, /* y */
        640, /* width */
        480, /* height */
        NULL,NULL,hInstance,NULL);

    if(hwnd == NULL) {
        MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }

    /*
        This is the heart of our program where all input is processed and
        sent to WndProc. Note that GetMessage blocks code flow until it receives something, so
        this loop will not produce unreasonably high CPU usage
    */
    while(GetMessage(&Msg, NULL, 0, 0) > 0) { /* If no error is received... */
        TranslateMessage(&Msg); /* Translate key codes to chars if present */
        DispatchMessage(&Msg); /* Send it to WndProc */
    }
    return Msg.wParam;
}
2015-04-27 13:59
安德鲁80
Rank: 1
来 自:湖北
等 级:新手上路
帖 子:1
专家分:7
注 册:2015-4-27
收藏
得分:7 

just fuck it.
2015-04-27 17:25
素还真少爷
Rank: 2
等 级:论坛游民
帖 子:7
专家分:26
注 册:2015-4-27
收藏
得分:7 
这个得研究研究
2015-04-27 19:05
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
谢谢你,我知道为什么进去死循环了,在消息循环中,msgflag只能得到一次消息,在while里msgflag得知一直不变,说已经入死循环,已经改过来了,还是要谢谢你
2015-05-04 23:47
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
学习了。共勉
2015-05-05 07:29
快速回复:求大家帮我看一下程序错在哪?静茹窗口的是鼠标不是箭头,并且程序好像 ...
数据加载中...
 
   



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

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