HWND wndHandle; //global variable
// code snipped
WNDCLASSEX wcex;
// code snipped
wcex.lpszClassName = (LPCWSTR) "MyTitleName";
// code snipped
wndHandle = CreateWindow(
(LPCWSTR)"MyTitleName", //the window class to use
(LPCWSTR)"MyTitleName", //the title bar text
...
...
Run Code Online (Sandbox Code Playgroud)
我正在关注Win32 Window应用程序的教程.上面的代码用于设置窗口屏幕标题栏的名称.编译器对我大吼:"无法从'const char [12]'转换为'LPCWSTR'"所以好吧,我用"LPCWSTR"对我的字符串"MyTitleName"进行了编码,所有编译都很好.但是,在运行时,窗口屏幕的标题结果是中文字符.我尝试改变字符串,中文字符总是根据我的字符串改变.我正在使用XP Visual C++ 2008 Express Edition,我将英语(美国)作为非unicode程序的设置.我不明白.弦怎么变成中国人?
我正在使用以下方法注册我的班级:
BOOL CNDSClientDlg::InitInstance()
{
//Register Window Updated on 16th Nov 2010, @Subhen
// Register our unique class name that we wish to use
WNDCLASS wndcls;
memset(&wndcls, 0, sizeof(WNDCLASS));
wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wndcls.lpfnWndProc = ::DefWindowProc;
wndcls.hInstance = AfxGetInstanceHandle();
wndcls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndcls.lpszMenuName = NULL;
//Class name for using FindWindow later
wndcls.lpszClassName = _T("CNDSClientDlg");
// Register new class and exit if it fails
if(!AfxRegisterClass(&wndcls)) // [C]
{
return FALSE;
}
}
Run Code Online (Sandbox Code Playgroud)
然后调用InitInstance方法并在类的构造函数中创建窗口:
CNDSClientDlg::CNDSClientDlg(CWnd* pParent /*=NULL*/)
: …Run Code Online (Sandbox Code Playgroud) 我来自C#而且很新,所以请耐心等待.
我有一个MainWindow有一些私有HWND变量的类.一个用于窗口本身,一个用于每个控件.我想我需要跟踪它们,或者以后会让事情变得更容易吗?
无论如何,我有:
class GUIMain
{
private:
HINSTANCE hInstance;
HWND hWnd; // The windows itself
HWND cmdGenerate, cmdQuit; // 2 buttons
Run Code Online (Sandbox Code Playgroud)
我有一个调用的私有方法initialise(HWND hWnd)被调用WM_CREATE,它将所有控件添加到窗口:
void MainWindow::initialise(HWND hWnd)
{
this->hWnd = hWnd;
cmdGenerate = CreateWindow(TEXT("BUTTON"), TEXT("&Generate..."),
WS_VISIBLE | WS_CHILD,
6, 6, 150, 25,
hWnd, (HMENU)1, 0, 0);
cmdQuit = CreateWindow(TEXT("BUTTON"), TEXT("&Quit"),
WS_VISIBLE | WS_CHILD,
6, 37, 150, 25,
hWnd, (HMENU)2, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
但是这似乎没有把按钮放在窗口上.事实上,当我调试时,我可以看到它甚至没有越过第一行.奇怪的是,当我把它更改为:
void MainWindow::initialise(HWND hWnd)
{
//this->hWnd = hWnd;
/*cmdGenerate = */CreateWindow(TEXT("BUTTON"), …Run Code Online (Sandbox Code Playgroud) 我正在为OpenGL开发一个可移植层(为Linux和Windows抽象出glX和wgl的东西)......无论如何,它有一个创建窗口的方法...如果你没有传入父级,你会得到一个带框架的真实窗口...如果你传入一个父级,你会得到一个无框的无框窗口......
这工作正常,只要我在1个线程上完成所有操作...一旦另一个线程尝试创建子窗口,应用程序就会在win32调用"CreateWindow()"中死锁.有任何想法吗?
当我使用该CreateWindow()函数在 C 中创建一个窗口时 ,它运行良好,它会立即消失,所以我使用该getch()函数尝试解决问题,但它不起作用。窗口不显示按钮,并崩溃。
但是当我使用MessageBox()而不是 时getch(),它会保持正常运行。我试图弄清楚为什么会发生这种情况。
我尝试了很多东西,比如一起使用MessageBox()和getch()一起使用,使用getch()before 和 after ShowWindow(),但每次它都会给我一些有趣的结果,但不是窗口的正常功能。
有效的代码:
#include <windows.h>
int _stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
HWND h;
HINSTANCE i;
h = CreateWindow("Button", "XYZ", WS_OVERLAPPEDWINDOW, 15, 20, 250, 200, 0, 0, i, 0);
ShowWindow(h, nCmdShow);
MessageBox(0, "Stop", "Wait", MB_OK);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不起作用的代码:
#include <windows.h>
int _stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) …Run Code Online (Sandbox Code Playgroud)