#include <windows.h>
#include "resource.h"#define ID_LIST 1
#define ID_TEXT 2LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
void fillList(HWND);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){
static TCHAR szAppName[]=TEXT("ListBox");
HWND hwnd;
MSG msg;
WNDCLASS wndclass; wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.lpfnWndProc=WndProc;
wndclass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(EDIT));
wndclass.hInstance=hInstance;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW; if(!RegisterClass(&wndclass)){
MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
return 0;
} hwnd=CreateWindow(szAppName,TEXT("ListBox"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL); ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd); while(GetMessage(&msg,NULL,NULL,NULL)){
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}void fillList(HWND hwndList){
int iLength;
TCHAR *pVarBlock,*pVarBeg,*pVarEnd,*pVarName; pVarBlock=GetEnvironmentStrings();
if(pVarBlock==NULL){
MessageBox(NULL,TEXT("Function Error!"),TEXT("ERROR"),MB_ICONERROR);
return ;
} while(*pVarBlock){
if(*pVarBlock!='='){
pVarBeg=pVarBlock;
while(*pVarBlock++!='=') ;
pVarEnd=pVarBlock-1;
iLength=pVarEnd-pVarBeg;
pVarName=(TCHAR*)calloc(iLength+1,sizeof(TCHAR));
CopyMemory(pVarName,pVarBeg,iLength*sizeof(TCHAR));
pVarName[iLength]='\0';
SendMessage(hwndList,LB_ADDSTRING,0,(LPARAM)pVarName);
free(pVarName);
}
while(*pVarBlock++!='\0') ;
}
FreeEnvironmentStrings(pVarBlock);
}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
static HWND hwndList,hwndText;
int iIndex,iLength,cxChar,cyChar;
TCHAR *pVarName,*pVarValue; switch(message){
case WM_CREATE:
cxChar=LOWORD(GetDialogBaseUnits());
cyChar=HIWORD(GetDialogBaseUnits()); hwndList=CreateWindow(TEXT("listbox"),NULL,
WS_CHILD|WS_VISIBLE|LBS_STANDARD,
cxChar,cyChar*3,
cxChar*32+GetSystemMetrics(SM_CXVSCROLL),
cyChar*10,
hwnd,(HMENU)ID_LIST,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL); hwndText=CreateWindow(TEXT("static"),NULL,
WS_CHILD|WS_VISIBLE|SS_LEFT,
cxChar,cyChar,
GetSystemMetrics(SM_CXSCREEN),cyChar,
hwnd,(HMENU)ID_TEXT,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL); fillList(hwndList);
return 0; case WM_SETFOCUS:
SetFocus(hwndList);
return 0; case WM_COMMAND:
if(LOWORD(wParam)==ID_LIST&&HIWORD(wParam)==LBN_SELCHANGE){
iIndex=SendMessage(hwndList,LB_GETCURSEL,0,0);
iLength=SendMessage(hwndList,LB_GETTEXTLEN,iIndex,0)+1;
pVarName=(TCHAR*)calloc(iLength,sizeof(TCHAR));
SendMessage(hwndList,LB_GETTEXT,iIndex,(LPARAM)pVarName); iLength=GetEnvironmentVariable(pVarName,NULL,0);
pVarValue=(TCHAR*)calloc(iLength,sizeof(TCHAR));
GetEnvironmentVariable(pVarName,pVarValue,iLength); SetWindowText(hwndText,pVarValue);
free(pVarName);
free(pVarValue);
}
return 0; case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
#include "resource.h"#define ID_LIST 1
#define ID_TEXT 2LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
void fillList(HWND);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){
static TCHAR szAppName[]=TEXT("ListBox");
HWND hwnd;
MSG msg;
WNDCLASS wndclass; wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.lpfnWndProc=WndProc;
wndclass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(EDIT));
wndclass.hInstance=hInstance;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW; if(!RegisterClass(&wndclass)){
MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
return 0;
} hwnd=CreateWindow(szAppName,TEXT("ListBox"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL); ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd); while(GetMessage(&msg,NULL,NULL,NULL)){
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}void fillList(HWND hwndList){
int iLength;
TCHAR *pVarBlock,*pVarBeg,*pVarEnd,*pVarName; pVarBlock=GetEnvironmentStrings();
if(pVarBlock==NULL){
MessageBox(NULL,TEXT("Function Error!"),TEXT("ERROR"),MB_ICONERROR);
return ;
} while(*pVarBlock){
if(*pVarBlock!='='){
pVarBeg=pVarBlock;
while(*pVarBlock++!='=') ;
pVarEnd=pVarBlock-1;
iLength=pVarEnd-pVarBeg;
pVarName=(TCHAR*)calloc(iLength+1,sizeof(TCHAR));
CopyMemory(pVarName,pVarBeg,iLength*sizeof(TCHAR));
pVarName[iLength]='\0';
SendMessage(hwndList,LB_ADDSTRING,0,(LPARAM)pVarName);
free(pVarName);
}
while(*pVarBlock++!='\0') ;
}
FreeEnvironmentStrings(pVarBlock);
}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
static HWND hwndList,hwndText;
int iIndex,iLength,cxChar,cyChar;
TCHAR *pVarName,*pVarValue; switch(message){
case WM_CREATE:
cxChar=LOWORD(GetDialogBaseUnits());
cyChar=HIWORD(GetDialogBaseUnits()); hwndList=CreateWindow(TEXT("listbox"),NULL,
WS_CHILD|WS_VISIBLE|LBS_STANDARD,
cxChar,cyChar*3,
cxChar*32+GetSystemMetrics(SM_CXVSCROLL),
cyChar*10,
hwnd,(HMENU)ID_LIST,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL); hwndText=CreateWindow(TEXT("static"),NULL,
WS_CHILD|WS_VISIBLE|SS_LEFT,
cxChar,cyChar,
GetSystemMetrics(SM_CXSCREEN),cyChar,
hwnd,(HMENU)ID_TEXT,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL); fillList(hwndList);
return 0; case WM_SETFOCUS:
SetFocus(hwndList);
return 0; case WM_COMMAND:
if(LOWORD(wParam)==ID_LIST&&HIWORD(wParam)==LBN_SELCHANGE){
iIndex=SendMessage(hwndList,LB_GETCURSEL,0,0);
iLength=SendMessage(hwndList,LB_GETTEXTLEN,iIndex,0)+1;
pVarName=(TCHAR*)calloc(iLength,sizeof(TCHAR));
SendMessage(hwndList,LB_GETTEXT,iIndex,(LPARAM)pVarName); iLength=GetEnvironmentVariable(pVarName,NULL,0);
pVarValue=(TCHAR*)calloc(iLength,sizeof(TCHAR));
GetEnvironmentVariable(pVarName,pVarValue,iLength); SetWindowText(hwndText,pVarValue);
free(pVarName);
free(pVarValue);
}
return 0; case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
解决方案 »
- 获取IE正在浏览的网页的URL
- 关于ondraw中的显示问题
- 客户端通过代理连接到服务器?请问服务器怎么得到客户机的名字
- 关于虚拟IP地址
- 关于颜色取舍的算法
- 那位能帮我提供在VC下访问ORACLE数据库的源码? 一定给出高分!
- 再问一问:我自己编的网络视频传输程序用tcp/ip在公网上传输最大才40-50k/s左右是否对,象realsystem server不知是如何做的?或别的程序如
- 在EDIT 中 删除光标所在行应该怎么办.通过点击按钮完成.
- VC副线程操作界面控件,如何保证线程安全性
- 在VC++6中怎样控制鼠标的光标的变化
- 怪!今天我用gdi+出现了这个
- ··谁用过GetDIBit?为什么在这里获取不到东西呀?————
hwndList=CreateWindow(TEXT("listbox"),NULL,
WS_CHILD|WS_VISIBLE|LBS_STANDARD,
cxChar,cyChar*3,
cxChar*32+GetSystemMetrics(SM_CXVSCROLL),
cyChar*10,
hwnd,(HMENU)ID_LIST,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL); hwndText=CreateWindow(TEXT("static"),NULL,
WS_CHILD|WS_VISIBLE|SS_LEFT,
cxChar,cyChar,
GetSystemMetrics(SM_CXSCREEN),cyChar,
hwnd,(HMENU)ID_TEXT,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
//CreateWindow是会触发WM_CREATE消息的,所以不能放在回调函数里做,这样的话每一次执行到CreateWindow都会发送WM_CREATE消息给窗口,这样窗口又会从case WM_CREATE:这里开始执行,
于是造成了递归的效果,这就是为什么你的ListBox的创建出来一层套一层的原因。
我把他们都转移到主窗口的创建的后面,也就是主窗口ShowWindow之前去执行了。代码:
#include <windows.h>#define ID_LIST 1
#define ID_TEXT 2LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);void fillList(HWND); static HWND hwndList,hwndText;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){
static TCHAR szAppName[]=TEXT("ListBox");
HWND hwnd;
MSG msg;
WNDCLASS wndclass; wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.lpfnWndProc=WndProc;
wndclass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_ERROR);
wndclass.hInstance=hInstance;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW; if(!RegisterClass(&wndclass)){
MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
return 0;
} hwnd=CreateWindow(szAppName,TEXT("ListBox"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
//////////////////////////////////////+++++++++++++++++++++++++++
int cxChar,cyChar; cxChar=LOWORD(GetDialogBaseUnits());
cyChar=HIWORD(GetDialogBaseUnits()); hwndList=CreateWindow(TEXT("combobox"),NULL,
WS_CHILD|WS_VISIBLE,
cxChar,cyChar*3,
cxChar*32+GetSystemMetrics(SM_CXVSCROLL),
cyChar*10,
hwnd,(HMENU)ID_LIST,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL); hwndText=CreateWindow(TEXT("static"),NULL,
WS_CHILD|WS_VISIBLE|SS_LEFT,
cxChar,cyChar,
GetSystemMetrics(SM_CXSCREEN),cyChar,
hwnd,(HMENU)ID_TEXT,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL); fillList(hwndList);
////////////////////////////////////++++++++++++++++++++ ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd); while(GetMessage(&msg,NULL,NULL,NULL)){
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}void fillList(HWND hwndList){
int iLength;
TCHAR *pVarBlock,*pVarBeg,*pVarEnd,*pVarName; pVarBlock=GetEnvironmentStrings();
if(pVarBlock==NULL){
MessageBox(NULL,TEXT("Function Error!"),TEXT("ERROR"),MB_ICONERROR);
return ;
} while(*pVarBlock){
if(*pVarBlock!='='){
pVarBeg=pVarBlock;
while(*pVarBlock++!='=') ;
pVarEnd=pVarBlock-1;
iLength=pVarEnd-pVarBeg;
pVarName=(TCHAR*)calloc(iLength+1,sizeof(TCHAR));
CopyMemory(pVarName,pVarBeg,iLength*sizeof(TCHAR));
pVarName[iLength]='\0';
///////////////////////////////////////////////////
SendMessage(hwndList,CB_ADDSTRING,0,(LPARAM)pVarName);
/////////////////////CB_ADDSTRING->CB_ADDSTRING//////////////////////////
free(pVarName);
}
while(*pVarBlock++!='\0') ;
}
FreeEnvironmentStrings(pVarBlock);
}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
int iIndex,iLength;
TCHAR *pVarName,*pVarValue; switch(message){
////////////////////////////////////////////------------------------
case WM_SETFOCUS:
SetFocus(hwndList);
return 0; case WM_COMMAND:
if(LOWORD(wParam)==ID_LIST&&HIWORD(wParam)==CBN_SELCHANGE){
iIndex=SendMessage(hwndList,CB_GETCURSEL,0,0);
iLength=SendMessage(hwndList,CB_GETLBTEXTLEN,iIndex,0)+1;
pVarName=(TCHAR*)calloc(iLength,sizeof(TCHAR));
SendMessage(hwndList,CB_GETLBTEXT,iIndex,(LPARAM)pVarName); iLength=GetEnvironmentVariable(pVarName,NULL,0);
pVarValue=(TCHAR*)calloc(iLength,sizeof(TCHAR));
GetEnvironmentVariable(pVarName,pVarValue,iLength); SetWindowText(hwndText,pVarValue);
free(pVarName);
free(pVarValue);
}
return 0; case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}//另外所有的LB_...等ListBox属性我也改成了相应的CB_...ComboBox属性。
#include <windows.h>#define ID_LIST 1
#define ID_TEXT 2LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);void fillList(HWND); static HWND hwndList,hwndText;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){
static TCHAR szAppName[]=TEXT("ListBox");
HWND hwnd;
MSG msg;
WNDCLASS wndclass; wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.lpfnWndProc=WndProc;
wndclass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_ERROR);
wndclass.hInstance=hInstance;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW; if(!RegisterClass(&wndclass)){
MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
return 0;
} hwnd=CreateWindow(szAppName,TEXT("ListBox"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
//////////////////////////////////////+++++++++++++++++++++++++++
int cxChar,cyChar; cxChar=LOWORD(GetDialogBaseUnits());
cyChar=HIWORD(GetDialogBaseUnits()); hwndList=CreateWindow(TEXT("combobox"),NULL,
WS_CHILD|WS_VISIBLE,
cxChar,cyChar*3,
cxChar*32+GetSystemMetrics(SM_CXVSCROLL),
cyChar*10,
hwnd,(HMENU)ID_LIST,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL); hwndText=CreateWindow(TEXT("static"),NULL,
WS_CHILD|WS_VISIBLE|SS_LEFT,
cxChar,cyChar,
GetSystemMetrics(SM_CXSCREEN),cyChar,
hwnd,(HMENU)ID_TEXT,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL); fillList(hwndList);
////////////////////////////////////++++++++++++++++++++ ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd); while(GetMessage(&msg,NULL,NULL,NULL)){
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}void fillList(HWND hwndList){
int iLength;
TCHAR *pVarBlock,*pVarBeg,*pVarEnd,*pVarName; pVarBlock=GetEnvironmentStrings();
if(pVarBlock==NULL){
MessageBox(NULL,TEXT("Function Error!"),TEXT("ERROR"),MB_ICONERROR);
return ;
} while(*pVarBlock){
if(*pVarBlock!='='){
pVarBeg=pVarBlock;
while(*pVarBlock++!='=') ;
pVarEnd=pVarBlock-1;
iLength=pVarEnd-pVarBeg;
pVarName=(TCHAR*)calloc(iLength+1,sizeof(TCHAR));
CopyMemory(pVarName,pVarBeg,iLength*sizeof(TCHAR));
pVarName[iLength]='\0';
///////////////////////////////////////////////////
SendMessage(hwndList,CB_ADDSTRING,0,(LPARAM)pVarName);
/////////////////////CB_ADDSTRING->CB_ADDSTRING//////////////////////////
free(pVarName);
}
while(*pVarBlock++!='\0') ;
}
//FreeEnvironmentStrings(pVarBlock);//Memory Leak Here.
}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
int iIndex,iLength;
TCHAR *pVarName,*pVarValue; switch(message){
////////////////////////////////////////////------------------------
case WM_SETFOCUS:
SetFocus(hwndList);
return 0; case WM_COMMAND:
if(LOWORD(wParam)==ID_LIST&&HIWORD(wParam)==CBN_SELCHANGE){
iIndex=SendMessage(hwndList,CB_GETCURSEL,0,0);
iLength=SendMessage(hwndList,CB_GETLBTEXTLEN,iIndex,0)+1;
pVarName=(TCHAR*)calloc(iLength,sizeof(TCHAR));
SendMessage(hwndList,CB_GETLBTEXT,iIndex,(LPARAM)pVarName); iLength=GetEnvironmentVariable(pVarName,NULL,0);
pVarValue=(TCHAR*)calloc(iLength,sizeof(TCHAR));
GetEnvironmentVariable(pVarName,pVarValue,iLength); SetWindowText(hwndText,pVarValue);
free(pVarName);
free(pVarValue);
}
return 0; case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}//另外所有的LB_...等ListBox属性我也改成了相应的CB_...ComboBox属性。