...
#define DTFLAGS (DT_WORDBREAK | DT_EXPANDTABS | DT_NOCLIP | DT_NOPREFIX)
...
case WM_PAINT:
if(!bValidFile)
break;
if(INVALID_HANDLE_VALUE!=(hFile=CreateFile(szBuffer,
GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL)))
{
bValidFile=FALSE;
break;
}
ReadFile(hFile,buffer,MAXREAD,(LPDWORD)(&i),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,(LPCSTR)buffer,i,&rect,DTFLAGS);
EndPaint(hwnd,&ps);
return 0;
我感觉这个应该可以在显示区显示文件内容才对,为什么编译出来没有这功能呢?
#define DTFLAGS (DT_WORDBREAK | DT_EXPANDTABS | DT_NOCLIP | DT_NOPREFIX)
...
case WM_PAINT:
if(!bValidFile)
break;
if(INVALID_HANDLE_VALUE!=(hFile=CreateFile(szBuffer,
GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL)))
{
bValidFile=FALSE;
break;
}
ReadFile(hFile,buffer,MAXREAD,(LPDWORD)(&i),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,(LPCSTR)buffer,i,&rect,DTFLAGS);
EndPaint(hwnd,&ps);
return 0;
我感觉这个应该可以在显示区显示文件内容才对,为什么编译出来没有这功能呢?
解决方案 »
- 周末散个分吧。。。。。。。。。。。。。。。。。。。。。。。。。
- 问题。。。急!!!!!!!
- 一个进程中有好几个线程,应该注入哪个线程?
- 急救:httpsendrequest 发送HTT包时如遇到重写向的即HTTP300,如何获取成功页面?
- 简单问题
- 字符类型转换问题,紧急求救~!◎
- help me
- 我的驱动程序sys文件在startService()时失败,why? 急!
- 在VC++6.0中使用COM组件进行二次开发时需要哪些必要步骤?
- VBS 对COM接口的调用
- MFC 中OnTimer()函数 想实现的是:画一个圆,圆的颜色随时间变化 为什么颜色不变?
- VS2008重载擦除窗体背景OnEraseBkgnd,会内存泄露?
1、看看WM_PAINT消息有没有被响应
2、bValidFile是不是true
3、szBuffer指向的文件是否存在
...
case WM_PAINT:
if(!bValidFile)
break;
//打开文件
if(INVALID_HANDLE_VALUE!=(hFile=CreateFile(szBuffer,
GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL)))
{
bValidFile=FALSE;
break;
}
//读文件
ReadFile(hFile,buffer,MAXREAD,(LPDWORD)(&i),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,(LPCSTR)buffer,i,&rect,DTFLAGS);
EndPaint(hwnd,&ps);
return 0;
全代码如下,麻烦大神看一下。#include <Windows.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 ListProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
WNDPROC OldList;
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd )
{
static TCHAR szAppName[]=TEXT("temp");
HWND hwnd;
MSG msg;
WNDCLASS wndclass; wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
// wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW | CS_VREDRAW; if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("注册失败"),szAppName,MB_ICONERROR);
return 0;
} hwnd=CreateWindow(
szAppName,
TEXT("temp"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL); ShowWindow(hwnd,nShowCmd);
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 bValidFile;
static BYTE buffer[MAXREAD];
static HWND hwndList,hwndText;
static RECT rect;
static TCHAR szFile[MAX_PATH+1];
HANDLE hFile;
HDC hdc;
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("*.*") /*(LPARAM)TEXT("D:\\赵一丁")*/);
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);
bValidFile=TRUE;
lstrcpy(szFile,szBuffer);
GetCurrentDirectory(MAX_PATH+1,szBuffer);
if(szBuffer[lstrlen(szBuffer)-1]!='\\')
lstrcat(szBuffer,TEXT("\\"));
SetWindowText(hwndText,lstrcat(szBuffer,szFile));
}
else
{
bValidFile=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(!bValidFile)
break;
if(INVALID_HANDLE_VALUE!=(hFile=CreateFile(szBuffer,
GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL)))
{
bValidFile=FALSE;
break;
}
ReadFile(hFile,buffer,MAXREAD,(LPDWORD)(&i),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,(LPCSTR)buffer,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 lParam)
{
if(message==WM_KEYDOWN && wParam==VK_RETURN)
SendMessage(GetParent(hwnd),WM_COMMAND,MAKELONG(1,LBN_DBLCLK),(LPARAM)hwnd);
return CallWindowProc(OldList,hwnd,message,wParam,lParam);
}
//#include "stdafx.h"#include <Windows.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 ListProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
WNDPROC OldList;
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);/////////////////////////////////////////////////////////////移到这里BOOL bValidFile;
BYTE buffer[MAXREAD];
HWND hwndList,hwndText;
HANDLE hFile;
TCHAR szFile[MAX_PATH+1];
TCHAR szBuffer[MAX_PATH+1];
RECT rect;
///////////////////////////////////////////////////////////////int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd )
{
static TCHAR szAppName[]=TEXT("temp");
HWND hwnd;
MSG msg;
WNDCLASS wndclass; wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
// wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW | CS_VREDRAW; if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("注册失败"),szAppName,MB_ICONERROR);
return 0;
} hwnd=CreateWindow(
szAppName,
TEXT("temp"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL); ShowWindow(hwnd,nShowCmd);
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)
{ HDC hdc;
int i,cxChar,cyChar;
PAINTSTRUCT ps;
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("*.*") /*(LPARAM)TEXT("D:\\赵一丁")*/);
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);
bValidFile=TRUE;
lstrcpy(szFile,szBuffer);
GetCurrentDirectory(MAX_PATH+1,szBuffer);
if(szBuffer[lstrlen(szBuffer)-1]!='\\')
lstrcat(szBuffer,TEXT("\\"));
SetWindowText(hwndText,lstrcat(szBuffer,szFile));
}
else
{
bValidFile=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(!bValidFile)
break;
///////////////////////////////////////////////////原文逻辑反了
if(INVALID_HANDLE_VALUE==(hFile=CreateFile(szBuffer,
GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL)))
{
bValidFile=FALSE;
break;
}
ReadFile(hFile,buffer,MAXREAD,(LPDWORD)(&i),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,(LPCSTR)buffer,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 lParam)
{
if(message==WM_KEYDOWN && wParam==VK_RETURN)
SendMessage(GetParent(hwnd),WM_COMMAND,MAKELONG(1,LBN_DBLCLK),(LPARAM)hwnd);
return CallWindowProc(OldList,hwnd,message,wParam,lParam);
}
谢谢。
1、逻辑反了。
2、要在 TCHAR szBuffer[MAX_PATH+1]前也加static.