sil*_*ent 1 c++ winapi controls
你好 我有以下 win32 程序,我有一个EDITTEXT没有显示在屏幕上的控件。EDITTEXT在主窗口上画了两个控件,但只有一个显示,这是为什么?
完整代码
#include <windows.h>
#include <iostream>
#include "resource.h"
using namespace std;
const int BUFFERMAX = 512;
char server_ip[BUFFERMAX];
int port;
const char windclassname[] = "windowClass";
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
INT_PTR CALLBACK AboutDialog(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
INT_PTR CALLBACK ConnectWin(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
WNDCLASSEX parent_window;
HWND hwnd;
MSG msg;
parent_window.cbSize = sizeof(WNDCLASSEX);
parent_window.style = 0;
parent_window.lpfnWndProc = WndProc;
parent_window.cbClsExtra = 0;
parent_window.cbWndExtra = 0;
parent_window.hInstance = hInstance;
parent_window.hIcon = LoadIcon(NULL,IDI_APPLICATION);
parent_window.hCursor = LoadCursor(NULL,IDC_ARROW);
parent_window.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
parent_window.lpszMenuName = MAKEINTRESOURCE(ID_MENU);
parent_window.lpszClassName = windclassname;
parent_window.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
//Registering the Class for use.
if ( !RegisterClassEx(&parent_window)){
MessageBox(NULL,"Could not Register WindowClass","Error",MB_OK);
return 0;
}
//Creating the window
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,windclassname,"UI test",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,250,350,NULL,NULL,hInstance,NULL);
if ( hwnd == NULL ){
MessageBox(NULL,"Could not create window","Error",MB_OK);
return 0;
}
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while ( GetMessage(&msg,NULL,0,0) > 0 ) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){
switch (msg){
case WM_CREATE:
HWND chatbox_cntrl;
HWND message_text;
chatbox_cntrl = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
0,0,240,260,hwnd,(HMENU)CHATBOX,GetModuleHandle(NULL),NULL);
message_text = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","",
WS_CHILD,0,270,240,10,hwnd,(HMENU)MESSAGETEXT,GetModuleHandle(NULL),NULL);
break;
case WM_COMMAND:
switch(LOWORD(wParam)){
case ID_MABOUT_INFO:
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_MABOUT_INFO), hwnd,AboutDialog);
break;
case ID_MCONTROLS_CONNECT:
int ret = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_MCONTROLS_CONNECT), hwnd,ConnectWin);
break;
case ID_MCONTROLS_EXIT:
DestroyWindow(hwnd);
break;
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
INT_PTR CALLBACK AboutDialog(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){
switch (msg){
case WM_CLOSE:
EndDialog(hwnd,WM_CLOSE);
break;
default:
return false;
}
return true;
}
INT_PTR CALLBACK ConnectWin(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){
switch(msg){
case WM_COMMAND:
switch(wParam){
case CONNECT_BUTTON:
int len = GetWindowTextLength(GetDlgItem(hwnd,EDITTEXT_CONNECT));
int recv = GetDlgItemText(hwnd,EDITTEXT_CONNECT,server_ip,len+1);
port = GetDlgItemInt(hwnd,EDITTEXT_PORT,NULL,false);
EndDialog(hwnd,CONNECT_BUTTON);
break;
}
break;
case WM_CLOSE:
EndDialog(hwnd,WM_CLOSE);
break;
default:
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
这是两个控件。
case WM_CREATE:
HWND chatbox_cntrl;
HWND message_text;
chatbox_cntrl = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
0,0,240,260,hwnd,(HMENU)CHATBOX,GetModuleHandle(NULL),NULL);
message_text = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","",
WS_CHILD,0,270,240,10,hwnd,(HMENU)MESSAGETEXT,GetModuleHandle(NULL),NULL);
break;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
503 次 |
| 最近记录: |