| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 915 人关注过本帖
标题:大家新年好 我是新手 有个问题想请教
只看楼主 加入收藏
LOMAC
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-4-27
收藏
 问题点数:0 回复次数:4 
大家新年好 我是新手 有个问题想请教
不知道问题在哪里。ShowWindow和UPdateWindow都调用了。在进程中可以看到这个程序的运行。就是看不到现实窗口。

程序就是   charles   petzold的《windows程序设计》里的sysmets2
#define       WINVER     0x501     
#include <windows.h>

#include"sysmets.h"
LRESULT   CALLBACK   WindowProc(
    HWND   hwnd,             //   handle   to   window
    UINT   uMsg,             //   message   identifier
    WPARAM   wParam,     //   first   message   parameter
    LPARAM   lParam       //   second   message   parameter
);


int   WINAPI   WinMain(
    HINSTANCE   hInstance,     //   handle   to   current   instance
    HINSTANCE   hPrevInstance,     //   handle   to   previous   instance
    LPSTR   lpCmdLine,             //   pointer   to   command   line
    int   nCmdShow                     //   show   state   of   window
    )
{
static   TCHAR   szAppName[]=TEXT("sysmets2");
HWND   hwnd;
MSG   msg;
WNDCLASS   wndclass;

wndclass.cbClsExtra=wndclass.cbClsExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WindowProc;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW ?CS_VREDRAW;

RegisterClass(&wndclass);

hwnd=CreateWindow(szAppName,"sysmets2",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);

ShowWindow(hwnd,SW_MAXIMIZE);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return   msg.wParam;
}
LRESULT   CALLBACK   WindowProc(
    HWND   hwnd,             //   handle   to   window
    UINT   uMsg,             //   message   identifier
    WPARAM   wParam,     //   first   message   parameter
    LPARAM   lParam       //   second   message   parameter
)

{
static   cxChar,cxCaps,cyChar,iVscrollPos,cyClient;
HDC   hdc;
int   i,y;
PAINTSTRUCT   ps;
TCHAR   szBuffer[10];
TEXTMETRIC   tm   ;

switch(uMsg)
{
case   WM_CREATE:
hdc=GetDC(hwnd);
GetTextMetrics(hdc,&tm);
cxChar=tm.tmAveCharWidth;
cxCaps=(tm.tmPitchAndFamily&1?3:2);
cyChar=tm.tmExternalLeading;
ReleaseDC(hwnd,hdc);
SetScrollRange(hwnd,SB_VERT,0,NUMLINES-1,true);
SetScrollPos(hwnd,SB_VERT,iVscrollPos,true);
break;
case   WM_SIZE:
cyClient=HIWORD(lParam);
break;

case   WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
for(i=0;i <NUMLINES;i++)
{
y=cyChar*(i-iVscrollPos);
TextOut(hdc,0,y,sysmetrics[i].szLabel,strlen(sysmetrics[i].szLabel));
TextOut(hdc,22*cxCaps,y,sysmetrics[i].szDesc,strlen(sysmetrics[i].szDesc));
SetTextAlign(hdc,TA_TOP ?TA_LEFT);
TextOut(hdc,22*cxCaps+40*cxChar,y,szBuffer,wsprintf(szBuffer,TEXT("50%d"),GetSystemMetrics(sysmetrics[i].Index)));
                        SetTextAlign(hdc,TA_TOP ?TA_LEFT);
}
break;
case   WM_DESTROY:
PostQuitMessage(0);

break;
default:
return   DefWindowProc(hwnd,uMsg,wParam,lParam);

}
}
搜索更多相关主题的帖子: 新年 
2008-02-12 09:55
LOMAC
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-4-27
收藏
得分:0 
我发现程序中CreateWindow前应该加hwnd  
修改后如下
#define       WINVER     0x501     
#include <windows.h>

#include"sysmets.h"
LRESULT   CALLBACK   WindowProc(
    HWND   hwnd,             //   handle   to   window
    UINT   uMsg,             //   message   identifier
    WPARAM   wParam,     //   first   message   parameter
    LPARAM   lParam       //   second   message   parameter
);


int   WINAPI   WinMain(
    HINSTANCE   hInstance,     //   handle   to   current   instance
    HINSTANCE   hPrevInstance,     //   handle   to   previous   instance
    LPSTR   lpCmdLine,             //   pointer   to   command   line
    int   nCmdShow                     //   show   state   of   window
    )
{
static   TCHAR   szAppName[]=TEXT("sysmets2");
HWND   hwnd;
MSG   msg;
WNDCLASS   wndclass;

wndclass.cbClsExtra=wndclass.cbClsExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WindowProc;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW |CS_VREDRAW;

RegisterClass(&wndclass);

hwnd=CreateWindow(szAppName,"sysmets2",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);

ShowWindow(hwnd,SW_MAXIMIZE);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return   msg.wParam;
}
LRESULT   CALLBACK   WindowProc(
    HWND   hwnd,             //   handle   to   window
    UINT   uMsg,             //   message   identifier
    WPARAM   wParam,     //   first   message   parameter
    LPARAM   lParam       //   second   message   parameter
)

{
static   cxChar,cxCaps,cyChar,iVscrollPos,cyClient;
HDC   hdc;
int   i,y;
PAINTSTRUCT   ps;
TCHAR   szBuffer[10];
TEXTMETRIC   tm   ;

switch(uMsg)
{
case   WM_CREATE:
hdc=GetDC(hwnd);
GetTextMetrics(hdc,&tm);
cxChar=tm.tmAveCharWidth;
cxCaps=(tm.tmPitchAndFamily&1?3:2) * cxChar / 2;
cyChar=tm.tmExternalLeading+tm.tmHeight;
ReleaseDC(hwnd,hdc);
SetScrollRange(hwnd,SB_VERT,0,NUMLINES-1,true);
SetScrollPos(hwnd,SB_VERT,iVscrollPos,true);
break;
case   WM_SIZE:
cyClient=HIWORD(lParam);
break;
case WM_VSCROLL:
        
            switch (LOWORD (wParam))
        
         {
        
    case SB_LINEUP:
        
          iVscrollPos -= 1 ;
        
            break ;
        
   
        
    case SB_LINEDOWN:
        
            iVscrollPos += 1 ;
        
            break ;
        

    case SB_PAGEUP:
        
            iVscrollPos -= cyClient / cyChar ;
        
            break ;
        
   
        
    case SB_PAGEDOWN:
        
            iVscrollPos += cyClient / cyChar ;
        
            break ;
        
   
        
    case SB_THUMBPOSITION:
        
            iVscrollPos = HIWORD (wParam) ;
        
            break ;
        
   
        
    default :
        
            break ;
        
         }
        

    iVscrollPos = max (0, min (iVscrollPos, NUMLINES - 1)) ;
        
    if (iVscrollPos != GetScrollPos (hwnd, SB_VERT))
        
         {
        
            SetScrollPos (hwnd, SB_VERT, iVscrollPos, TRUE) ;
        
            InvalidateRect (hwnd, NULL, TRUE) ;
        
         }
        
            break;

case   WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
for(i=0;i <NUMLINES;i++)
{
y=cyChar*(i-iVscrollPos);
TextOut(hdc,0,y,sysmetrics[i].szLabel,strlen(sysmetrics[i].szLabel));
TextOut(hdc,22*cxCaps,y,sysmetrics[i].szDesc,strlen(sysmetrics[i].szDesc));
SetTextAlign(hdc,TA_TOP |TA_LEFT);
TextOut(hdc,22*cxCaps+40*cxChar,y,szBuffer,wsprintf(szBuffer,TEXT("50%d"),GetSystemMetrics(sysmetrics[i].Index)));
                        SetTextAlign(hdc,TA_TOP |TA_LEFT);
}
break;
case   WM_DESTROY:
PostQuitMessage(0);

break;
default:
return   DefWindowProc(hwnd,uMsg,wParam,lParam);

}
}
可还是没有显示窗口  在进程序中却有运行 为什么啊?
2008-02-12 10:19
LOMAC
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-4-27
收藏
得分:0 
  知道了 是wndclass.cbWndExtra未赋值,导致注册失败
2008-02-12 10:40
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
你很强了,呵呵。至少论坛里面写api的人不是很多,帮你顶一个,帮你加加油。。
2008-02-13 09:03
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
不错,如果你用MFC将帮你省掉很多麻烦代码

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-02-17 11:51
快速回复:大家新年好 我是新手 有个问题想请教
数据加载中...
 
   



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

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