在控制台程序中怎样创建一个窗体?最好能贴出源码,万分感谢!
解决方案 »
- 比较棘手但大家经常碰到的一个问题
- 急!CList的性能问题:一个CList对象有一个插入元素线程,有一个删除元素线程,这样使用是否会存在问题?
- 请问按钮按下去让凹下去,再点击凸起来如何做?
- 请问有没有哪个API能够禁用某个指定的消息,如MOUSEMOVE
- 如何在一个窗口中画随机线条,然后可以清除掉,并不了痕迹?
- 请问如何在调试activex时注销activex,相信这个问题一定有很简单的办法,希望谁能教我一下!
- 救急!谁遇到过这么怪的问题?分不够再贴!!在线!
- 高分求助!!!!在CEditView如何实现光标的定位和输出。
- modem异步通讯方法
- 很着急的问题,大家帮帮忙啊
- 下载了一个explorerbar的源程序但是在vs2010资源管理器中显示出错
- 纸牌游戏的问题
其次,调用exe的方法不是我所想要的。
之后再使用SDK编程,创建窗体,注册窗体,窗体函数等
{
switch (uMsg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}void TestWindow()
{
LPCTSTR testClassName = _T("TestWndClass");
WNDCLASSEX wc;
memset(&wc, 0, sizeof(wc));
wc.cbSize = sizeof(wc);
wc.lpfnWndProc = TestWndProc;
wc.hInstance = GetModuleHandle(NULL);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.lpszClassName = testClassName;
RegisterClassEx(&wc);
HWND hwnd = CreateWindowEx(0, testClassName, _T("Test Window"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, wc.hInstance, NULL);
ShowWindow(hwnd, SW_SHOW);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnregisterClass(testClassName, wc.hInstance);
}
#include <stdio.h>LRESULT CALLBACK WinSunProc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;
wndcls.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
wndcls.hCursor = LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon = LoadIcon(NULL,IDI_INFORMATION);
wndcls.hInstance = hInstance;
wndcls.lpfnWndProc = WinSunProc;
wndcls.lpszClassName = "Sky";
wndcls.lpszMenuName = NULL;
wndcls.style = CS_HREDRAW|CS_VREDRAW; RegisterClass(&wndcls); HWND hwnd;
hwnd = CreateWindow("Sky",
"测试",
WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,
hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd); MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}LRESULT CALLBACK WinSunProc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"Sky",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","Sky",0);
HDC hdc;
hdc = GetDC(hwnd);
TextOut(hdc,0,50,"练习",strlen("练习"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"Sky",strlen("Sky"));
ReleaseDC(hwnd,hDC);
break;
case WM_CLOSE:
if(IDYES == MessageBox(hwnd,"是否真的要关闭?","Sky",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
这是孙的教程里的,还有相应的响应函数
我要求用控制台程序启动窗体,不是 WinMain 主函数。to cnzdgs :
高,实在是高!to 别人:
谢谢顶贴。
#include <atlwin.h>
#include <atlapp.h>int _tmain(int argc, _TCHAR* argv[])
{
CWindow window;
window.Create("button",NULL);
window.ShowWindow(SW_SHOW);
CMessageLoop messageLoop;
messageLoop.Run(); return 0;
}
控制台使用WTL显示Windows窗口