标题:一个菜鸟编程问题
只看楼主
grandia
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-11-25
 问题点数:0 回复次数:1 
一个菜鸟编程问题

这个程序是要输出你输入的键的。为什么不行,编译又没什么错。
#include <windows.h>

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

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

static TCHAR szAppName[] = TEXT ("KeyView1") ;

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 ("Keyboard Message Viewer #1"),

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)

{

static int cxClient, cyClient, cxChar, cyChar ;

static int cxClientMax, cyClientMax, cLines, cLinesMax;

TCHAR szTop[] = TEXT("message key char")

TEXT("Repeat Scan Ext ALT Prev Tran") ;

TCHAR szUnd[] = TEXT ("_______ ___ ____ ")

TEXT ("______ ____ ___ ___ ____ ____") ;

static PMSG pmsg ;

static TCHAR * szFormat[2] = {

TEXT ("%-13s %3d %-15s%c%6u %4d %3s %3s %4s %4s"),

TEXT ("%-13s 0x%04X%1s%c %6u %4d %3s %3s %4s %4s") } ;


TCHAR szBuffer[128] ;

TCHAR szKeyName[32] ;

static TCHAR *szYes = TEXT ("Yes") ;

static TCHAR *szNo = TEXT ("No") ;

static TCHAR *szDown = TEXT ("Down") ;

static TCHAR *szUp = TEXT ("Up") ;

static TCHAR *szMessage[] = {

TEXT ("WM_KEYDOWN"), TEXT ("WM_KEYUP"), TEXT ("WM_CHAR"),

TEXT ("WM_DEADCHAR"), TEXT ("WM_SYSKEYDOWN"),

TEXT ("WM_ SYSKEYUP"), TEXT ("WM_SYSCHAR"),

TEXT ("WM_SYSDEADCHAR")} ;

HDC hdc ;

PAINTSTRUCT ps ;

RECT rectScroll ;

int i, iType ;

TEXTMETRIC tm ;

switch (message)

{

case WM_CREATE:

case WM_DISPLAYCHANGE:

cxClientMax = GetSystemMetrics (SM_CXMAXIMIZED) ;

cyClientMax = GetSystemMetrics (SM_CYMAXIMIZED) ;

hdc = GetDC (hwnd) ;

SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;

GetTextMetrics (hdc, &tm) ;

cxChar = tm.tmAveCharWidth ;

cyChar = tm.tmHeight ;

ReleaseDC (hwnd, hdc) ;

if (pmsg)

free (pmsg) ;

cLinesMax = cyClientMax / cyChar ;

pmsg = malloc (cLinesMax * sizeof(MSG)) ;

cLines = 0 ;

case WM_SIZE:

if (message == WM_SIZE)

{

cxClient = LOWORD (lParam) ;

cyClient = HIWORD (lParam) ;

}

rectScroll.left = 0 ;

rectScroll.right = cxClient ;

rectScroll.top = cyChar ;

rectScroll.bottom = cyClient ;

InvalidateRect (hwnd, NULL, TRUE) ;

return 0 ;

case WM_KEYDOWN:

case WM_KEYUP:

case WM_CHAR:

case WM_DEADCHAR:

case WM_SYSKEYDOWN:

case WM_SYSKEYUP:

case WM_SYSCHAR:

case WM_SYSDEADCHAR:

for (i = cLinesMax - 1 ; i > 0 ; i--)

{

pmsg[i] = pmsg[i - 1] ;

}

pmsg[0].hwnd = hwnd ;

pmsg[0].message = message ;

pmsg[0].wParam = wParam ;

pmsg[0].lParam = lParam ;

cLines = min (cLines + 1, cyClient / cyChar - 1) ;

ScrollWindow (hwnd, 0, -cyChar, &rectScroll, &rectScroll) ;

break ;

case WM_PAINT:

hdc = BeginPaint (hwnd, &ps) ;

SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;

SetBkMode (hdc, TRANSPARENT) ;

TextOut (hdc, 0, 0, szTop, lstrlen (szTop)) ;

TextOut (hdc, 0, 0, szUnd, lstrlen (szUnd)) ;

for (i = 0 ; i < min (cLines, cyClient / cyChar -1) ; i++)

{

iType = pmsg[i].message == WM_CHAR ||

pmsg[i].message == WM_DEADCHAR ||

pmsg[i].message == WM_SYSCHAR ||

pmsg[i].message == WM_SYSDEADCHAR ;

GetKeyNameText (pmsg[i].lParam, szKeyName, sizeof(szKeyName)

/ sizeof(TCHAR)) ;

TextOut (hdc, 0, (cyClient / cyChar - 1 - i) * cyChar,

szBuffer, wsprintf (szBuffer, szFormat[iType],

szMessage[pmsg[i].message - WM_KEYFIRST],

pmsg[i].wParam,

(PTSTR)(iType ? TEXT(" ") : szKeyName),

(TCHAR)(iType ? pmsg[i].wParam : ' '),

LOWORD (pmsg[i].lParam),

HIWORD (pmsg[i].lParam) & 0xFF,

0x01000000 & pmsg[i].lParam ? szYes : szNo,

0x20000000 & pmsg[i].lParam ? szYes : szNo,

0x40000000 & pmsg[i].lParam ? szDown : szUp,

0x80000000 & pmsg[i].lParam ? szUp : szDown)) ;

}

EndPaint (hwnd, &ps) ;

return 0 ;

case WM_DESTROY:

PostQuitMessage (0) ;

return 0;

}

return DefWindowProc (hwnd, message, wParam, lParam) ;

}


搜索更多相关主题的帖子: 编程 include 
2005-11-25 23:07
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
得分:0 
太长了,没心思看啊!

♂ 死后定当长眠,生前何须久睡。♀
2005-11-26 06:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-35180-1-1.html




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

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