当前位置: 代码迷 >> 汇编语言 >> 初学汇编,遇到一个有关问题,求解
  详细解决方案

初学汇编,遇到一个有关问题,求解

热度:2528   发布时间:2013-02-26 00:00:00.0
初学汇编,遇到一个问题,求解~
今天在学习汇编的过程中遇到一个问题,本来想实现一个文件浏览器的功能,但是在一个地方卡主了一下午.
首先我建立了一个ComboBox和一个TreeView,ComboBox用来承载逻辑驱动器,TreeView用于承载文件夹
然后在WM_NOTIFY中捕获TreeView节点展开的事件,到此为止一切正常
但是当我想打印出节点文字的时候出现了问题
invoke MessageBox,hWinMain,[esi].itemNew.pszText,NULL,MB_OK
这里打印出来的总是乱码
一下附上代码,请各位帮忙看下问题到底出在哪里了.
资源文件

#define MANIFEST 24
#define IDD_DLG1 1000
#define IDC_CBO1 1001
#define IDC_TRV1 1002
#define IDC_LSV1 1003
#define IDR_XPMANIFEST1 1

#include "resource.h"

IDD_DLG1 DIALOGEX 6,6,585,306
CAPTION "diskcon"
FONT 8,"MS Sans Serif",0,0,0
STYLE WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|DS_CENTER
BEGIN
  CONTROL "",IDC_CBO1,"ComboBox",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP|CBS_DROPDOWNLIST,3,6,204,12
  CONTROL "",IDC_TRV1,"SysTreeView32",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP|TVS_LINESATROOT|TVS_HASLINES|TVS_HASBUTTONS,3,21,204,279,WS_EX_CLIENTEDGE
  CONTROL "",IDC_LSV1,"SysListView32",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,210,6,369,294,WS_EX_CLIENTEDGE
END

IDR_XPMANIFEST1 MANIFEST "xpmanifest.xml"




头文件


include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc

includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib

IDD_DLG1 equ 1000
IDC_CBO1 equ 1001
IDC_TRV1 equ 1002

DlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
_InitHeap PROTO
_InitDrivers PROTO
_DriverChange PROTO
_HasMoreDir PROTO :DWORD

.const
szAllFile db '*.*',0
szSubDir db '\*.*',0
szInsTemp db 'temp',0
szE db '展开',0
szC db '收起',0
.data?
hInstance dd ?
hWinMain dd ?
hHeap dd ?

dwTemp dd ?



代码文件


.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include diskcon.inc

.code
start:

invoke GetModuleHandle,NULL
mov hInstance,eax

invoke _InitHeap
mov hHeap,eax

invoke InitCommonControls
invoke DialogBoxParam,hInstance,IDD_DLG1,NULL,addr DlgProc,NULL
invoke ExitProcess,0

DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
local @item:TVITEM

.if uMsg == WM_INITDIALOG
push hWin
pop hWinMain

invoke _InitDrivers
invoke _DriverChange
.elseif uMsg == WM_COMMAND
mov eax,wParam
.if ax == IDC_CBO1
shr eax,16
.if ax == CBN_SELCHANGE
invoke _DriverChange
.endif
.endif

.elseif uMsg == WM_NOTIFY
mov esi,lParam
assume esi:ptr NMHDR
.if [esi].idFrom == IDC_TRV1
.if [esi].code == TVN_ITEMEXPANDING
assume esi:ptr NMTREEVIEW
invoke MessageBox,hWinMain,[esi].itemNew.pszText,NULL,MB_OK

.if [esi].action == TVE_EXPAND
;invoke MessageBox,hWinMain,offset szE,NULL,MB_OK
.elseif [esi].action == TVE_COLLAPSE
;invoke MessageBox,hWinMain,offset szC,NULL,MB_OK
.endif
  相关解决方案