厚着脸皮来发帖,两年来一个人自学有着说不出的苦逼,好比一人在大海里游荡,不分方向、、、唉

sinat_33003903 2016-01-18 08:37:28
代码是电子书上敲下来的,《windows程序设计第五版》字还是繁体的,这书真的越看越不懂,只能通过敲代码来理解书,前面几章还好,后面的例子都有在前面没有介绍过的API,只能百度和MSDN,可能是我看书不特么的认真,有网友说书不用那么认真看,认真的的话这书要花多少时间呢,到后面做东西的时候会慢慢懂得。人生有限啊、、我发前两个贴都是自己太粗心,函数名学错了 都不懂
代码如下: 问题就是运行成功有进程,窗口就是不出来
#include"stdafx.h"
#include"WIN.h"
#define ID_LIST 1
#define ID_TEXT 2
#define MAXREAD 8192
#define DIRATTR (DDL_READWRITE|DDL_READONLY|DDL_HIDDEN|DDL_SYSTEM|DDL_DIRECTORY|DDL_ARCHIVE|DDL_DRIVES)
#define DTFLAGS (DT_WORDBREAK|DT_EXPANDTABS|DT_NOCLIP|DT_NOPREFIX)
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK ListProc(HWND,UINT,WPARAM,LPARAM);
WNDPROC OldList;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrev,PSTR szCmd,int iCmd)
{
static TCHAR szAppName[]=TEXT("BAN");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);//注意这里
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;
RegisterClass(&wndclass);
hwnd=CreateWindow(NULL,TEXT("BAN22"),WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,CW_USEDEFAULT,CW_USEDEFAULT,500,500,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iCmd);
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 BOOL bValidFlie;
static BYTE buffer[MAXREAD];
static HWND hwndList,hwndText;
static RECT rect;
static TCHAR szFile[MAX_PATH+1];
HANDLE hFile;
HDC hdc;
LPDWORD i2;//这是我自己加的变量,书没有这个变量,书上直接用i做ReadFile函数的第四的参数,i是int类型
int i, cxChar,cyChar;
PAINTSTRUCT ps;
TCHAR szBuffer[MAX_PATH+1];
switch(message)
{
case WM_CREATE:
cxChar=LOWORD(GetDialogBaseUnits());
cyChar=HIWORD(GetDialogBaseUnits());
rect.left=20*cxChar;
rect.top=3*cyChar;
hwndList=CreateWindow(TEXT("listbox"),NULL,WS_CHILDWINDOW|WS_VISIBLE|LBS_STANDARD,
cxChar,cyChar*3,cxChar*13+GetSystemMetrics(SM_CXVSCROLL),cyChar*10,hwnd,(HMENU)ID_LIST,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
GetCurrentDirectory(MAX_PATH+1,szBuffer);

hwndText=CreateWindow(TEXT("static"),szBuffer,WS_CHILDWINDOW|WS_VISIBLE|SS_LEFT,
cxChar,cyChar,cxChar*MAX_PATH,cyChar,hwnd,(HMENU)ID_TEXT,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
OldList=(WNDPROC)SetWindowLong(hwndList,GWL_WNDPROC,(LPARAM)ListProc);
SendMessage(hwndList,LB_DIR,DIRATTR,(LPARAM)TEXT("*.*"));
return 0;
case WM_SIZE:
rect.right=LOWORD(lParam);
rect.bottom=HIWORD(lParam);
return 0;
case WM_SETFOCUS:
SetFocus(hwndList);
return 0;
case WM_COMMAND:
if (LOWORD(wParam)==ID_LIST&&HIWORD(wParam)==LBN_DBLCLK)
{
if(LB_ERR==(i=SendMessage(hwndList,LB_GETCURSEL,0,0)))
break;
SendMessage(hwndList,LB_GETTEXT,i,(LPARAM)szBuffer);
if(INVALID_HANDLE_VALUE!=(hFile=CreateFile(szBuffer,GENERIC_READ,FILE_SHARE_READ,NULL,
OPEN_EXISTING,0,NULL)))
{
CloseHandle(hFile);
bValidFlie=TRUE;
lstrcpy(szFile,szBuffer);
GetCurrentDirectory(MAX_PATH+1,szBuffer);
if(szBuffer[lstrlen(szBuffer)-1]!='\\')
lstrcat(szBuffer,TEXT("\\"));
SetWindowText(hwndText,lstrcat(szBuffer,szFile));
}
else
{
bValidFlie=FALSE;
szBuffer[lstrlen(szBuffer)-1]='\0';
if(!SetCurrentDirectory(szBuffer+1))
{
szBuffer[3]=':';
szBuffer[4]='\0';
SetCurrentDirectory(szBuffer+2);
}
GetCurrentDirectory(MAX_PATH+1,szBuffer);
SetWindowText(hwndText,szBuffer);
SendMessage(hwndList,LB_RESETCONTENT,0,0);
SendMessage(hwndList,LB_DIR,DIRATTR,(LPARAM)TEXT("*.*"));
}
InvalidateRect(hwnd,NULL,TRUE);
}
return 0;
case WM_PAINT:
if(!bValidFlie)
break;
if(INVALID_HANDLE_VALUE==(hFile=CreateFile(szFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL)))
{
bValidFlie=FALSE;
break;
}
ReadFile(hFile,buffer,MAXREAD,i2,NULL);
CloseHandle(hFile);
hdc=BeginPaint(hwnd,&ps);
SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT));
SetBkColor(hdc,GetSysColor(COLOR_BTNFACE));
DrawTextA(hdc,szBuffer,i,&rect,DTFLAGS);
EndPaint(hwnd,&ps);
return 0;

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

LRESULT CALLBACK ListProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lPaeam)
{
if(message==WM_KEYDOWN&&wParam==VK_RETURN)

SendMessage(GetParent(hwnd),WM_COMMAND,MAKELONG(1,LBN_DBLCLK),(LPARAM)hwnd);
return CallWindowProc(OldList,hwnd,message,wParam,lPaeam);
}
这个地方跟书上不同

书上是这样的

按书上的话是错误的 如下


我用的是vs2012
...全文
380 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
一笑拔剑 2016-01-20
  • 打赏
  • 举报
回复
源代码抄都抄不来? 你csdn搜索下windows程序设计第五版 源代码 里面肯定有的

1,508

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧