注册 登录
编程论坛 VC++/MFC

这是在vs2010 中的一个窗口 编译没问题 ,程序在运行,但窗口没出现!!

staler 发布于 2011-11-13 15:09, 746 次点击
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
//#include  "ATLCONV.H "
//#include   <atlbase.h>
//#include <atlconv.h>


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

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nShowCmd)
{
    WNDCLASS wndcls;

    wndcls.cbClsExtra=0;
    wndcls.cbWndExtra=0;
    wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
    wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndcls.hInstance=hInstance;
    wndcls.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wndcls.lpfnWndProc=WinProc;
    wndcls.lpszClassName=_T("TEXT");
    wndcls.lpszMenuName=NULL;
    wndcls.style=CS_HREDRAW | CS_VREDRAW;

    RegisterClass(&wndcls);

    HWND hwnd;
    hwnd=CreateWindow(_T("TEXT"),_T("TEXT"),WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);

    ShowWindow(hwnd,SW_NORMAL);
    UpdateWindow(hwnd);

    MSG umsg;
    while(GetMessage(&umsg,NULL,0,0))
    {
        TranslateMessage(&umsg);
        DispatchMessage(&umsg);

    }

return 0;

}
LRESULT CALLBACK WinProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
{
    switch(umsg)
    {
        case WM_CHAR:
            TCHAR szchar[20];
            _stprintf(szchar,_T("char is %d"),wParam);
            MessageBox(hwnd,szchar,_T("TEXT"),0);
            break;
        case WM_LBUTTONDOWN:
            MessageBox(hwnd,_T("mouse clicked!"),_T("TEXT"),0);
            HDC hDc;
            hDc=GetDC(hwnd);
            TextOut(hDc,0,50,_T("This is my place "),wcslen(_T("This is my place ")));
            ReleaseDC(hwnd,hDc);
            break;
        case WM_PAINT:
            HDC hdc;
            PAINTSTRUCT ps;
            hdc=BeginPaint(hwnd,&ps);
            TextOut(hdc,0,0,_T("I should stand up the place always "),wcslen(_T("I should stand up the place always ")));
            EndPaint(hwnd,&ps);

            break;
        case WM_CLOSE:
            if(IDYES==MessageBox(hwnd,_T("Are you sure close this window ?"),_T("TEXT"),MB_YESNO))
            {
                DestroyWindow(hwnd);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        defalt:
            return DefWindowProc(hwnd,umsg,wParam,lParam);
    }
    return 0;

}
2 回复
#2
hellovfp2011-11-16 12:21
编译没问题?不是吧?最后那个default都打错了。
LRESULT CALLBACK WinProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
{
    TCHAR szchar[20];
    HDC hDc;
    PAINTSTRUCT ps;

    switch(umsg)
    {
        case WM_CHAR:

            _stprintf(szchar,_T("char is %d"),wParam);
            MessageBox(hwnd,szchar,_T("TEXT"),0);
            break;
        case WM_LBUTTONDOWN:
            MessageBox(hwnd,_T("mouse clicked!"),_T("TEXT"),0);
            hDc=GetDC(hwnd);
            TextOut(hDc,0,50,_T("This is my place "),wcslen(_T("This is my place ")));
            ReleaseDC(hwnd,hDc);
            break;
        case WM_PAINT:
            hDc=BeginPaint(hwnd,&ps);
            TextOut(hDc,0,0,_T("I should stand up the place always "),wcslen(_T("I should stand up the place always ")));
            EndPaint(hwnd,&ps);

            break;
        case WM_CLOSE:
            if(IDYES==MessageBox(hwnd,_T("Are you sure close this window ?"),_T("TEXT"),MB_YESNO))
            {
                DestroyWindow(hwnd);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd,umsg,wParam,lParam);
    }
    return 0;

}
#3
zhoufeng19882011-11-16 15:30
就是default的问题。
编译是不会错,因为你写成 defalt:,就好比定义了一个标号,编译器肯定不会把它看成是一个语法错误。
但是switch不会执行到 defalt标号,所以也没有执行DefWindowProc,你的窗口肯定就出不来了。
1