mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 08:44:19 -04:00
use unicode flavors of RegisterClass et al
This commit is contained in:
parent
a40d6cfc36
commit
6154c9b431
@ -283,7 +283,9 @@ set_properties_now(WindowProperties &properties) {
|
||||
if (properties.has_title()) {
|
||||
string title = properties.get_title();
|
||||
_properties.set_title(title);
|
||||
SetWindowText(_hWnd, title.c_str());
|
||||
TextEncoder encoder;
|
||||
wstring title_w = encoder.decode_text(title);
|
||||
SetWindowTextW(_hWnd, title_w.c_str());
|
||||
properties.clear_title();
|
||||
}
|
||||
|
||||
@ -953,9 +955,10 @@ bool WinGraphicsWindow::
|
||||
open_graphic_window(bool fullscreen) {
|
||||
DWORD window_style = make_style(fullscreen);
|
||||
|
||||
string title;
|
||||
wstring title;
|
||||
if (_properties.has_title()) {
|
||||
title = _properties.get_title();
|
||||
TextEncoder encoder;
|
||||
title = encoder.decode_text(_properties.get_title());
|
||||
}
|
||||
|
||||
if (!_properties.has_size()) {
|
||||
@ -999,11 +1002,12 @@ open_graphic_window(bool fullscreen) {
|
||||
}
|
||||
|
||||
if (!_hparent) { // This can be a regular window or a fullscreen window
|
||||
_hWnd = CreateWindow(wclass._name.c_str(), title.c_str(), window_style,
|
||||
metrics.x, metrics.y,
|
||||
metrics.width,
|
||||
metrics.height,
|
||||
NULL, NULL, hinstance, 0);
|
||||
cerr << "wclass is " << wclass._name << ", title is + " << title << "\n";
|
||||
_hWnd = CreateWindowW(wclass._name.c_str(), title.c_str(), window_style,
|
||||
metrics.x, metrics.y,
|
||||
metrics.width,
|
||||
metrics.height,
|
||||
NULL, NULL, hinstance, 0);
|
||||
} else { // This is a regular window with a parent
|
||||
int x_origin = 0;
|
||||
int y_origin = 0;
|
||||
@ -1013,11 +1017,11 @@ open_graphic_window(bool fullscreen) {
|
||||
y_origin = _properties.get_y_origin();
|
||||
}
|
||||
|
||||
_hWnd = CreateWindow(wclass._name.c_str(), title.c_str(),
|
||||
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS ,
|
||||
x_origin, y_origin,
|
||||
_properties.get_x_size(), _properties.get_y_size(),
|
||||
_hparent, NULL, hinstance, 0);
|
||||
_hWnd = CreateWindowW(wclass._name.c_str(), title.c_str(),
|
||||
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS ,
|
||||
x_origin, y_origin,
|
||||
_properties.get_x_size(), _properties.get_y_size(),
|
||||
_hparent, NULL, hinstance, 0);
|
||||
|
||||
if (_hWnd) {
|
||||
// join our keyboard state with the parents
|
||||
@ -1723,6 +1727,12 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
|
||||
// supposed to come in through WM_CHAR, too, but there seems to
|
||||
// be a bug in Win2000 in that it only sends question mark
|
||||
// characters through here.)
|
||||
|
||||
// Actually, probably that "bug" was due to the fact that we were
|
||||
// previously using the ANSI versions of RegisterClass etc., in
|
||||
// which case the actual value passed to WM_CHAR seems to be
|
||||
// poorly defined. Now we are using RegisterClassW etc., which
|
||||
// means WM_CHAR is absolutely supposed to be utf-16.
|
||||
if (!_ime_open) {
|
||||
_input_devices[0].keystroke(wparam);
|
||||
}
|
||||
@ -2114,7 +2124,7 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
|
||||
(*it)->wnd_proc(this, hwnd, msg, wparam, lparam);
|
||||
}
|
||||
|
||||
return DefWindowProc(hwnd, msg, wparam, lparam);
|
||||
return DefWindowProcW(hwnd, msg, wparam, lparam);
|
||||
}
|
||||
|
||||
|
||||
@ -2142,7 +2152,7 @@ static_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
|
||||
|
||||
// Oops, we weren't creating a window! Don't know how to handle the
|
||||
// message, so just pass it on to Windows to deal with it.
|
||||
return DefWindowProc(hwnd, msg, wparam, lparam);
|
||||
return DefWindowProcW(hwnd, msg, wparam, lparam);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
@ -2690,8 +2700,8 @@ static HCURSOR get_cursor(const Filename &filename);
|
||||
const WinGraphicsWindow::WindowClass &WinGraphicsWindow::
|
||||
register_window_class(const WindowProperties &props) {
|
||||
WindowClass wcreg(props);
|
||||
ostringstream wclass_name;
|
||||
wclass_name << "WinGraphicsWindow" << _window_class_index;
|
||||
wostringstream wclass_name;
|
||||
wclass_name << L"WinGraphicsWindow" << _window_class_index;
|
||||
wcreg._name = wclass_name.str();
|
||||
|
||||
pair<WindowClasses::iterator, bool> found = _window_classes.insert(wcreg);
|
||||
@ -2705,12 +2715,12 @@ register_window_class(const WindowProperties &props) {
|
||||
// We have not yet created this window class.
|
||||
_window_class_index++;
|
||||
|
||||
WNDCLASS wc;
|
||||
WNDCLASSW wc;
|
||||
|
||||
HINSTANCE instance = GetModuleHandle(NULL);
|
||||
|
||||
// Clear before filling in window structure!
|
||||
ZeroMemory(&wc, sizeof(WNDCLASS));
|
||||
ZeroMemory(&wc, sizeof(wc));
|
||||
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
|
||||
wc.lpfnWndProc = (WNDPROC)static_window_proc;
|
||||
wc.hInstance = instance;
|
||||
@ -2721,7 +2731,7 @@ register_window_class(const WindowProperties &props) {
|
||||
wc.lpszMenuName = NULL;
|
||||
wc.lpszClassName = wclass._name.c_str();
|
||||
|
||||
if (!RegisterClass(&wc)) {
|
||||
if (!RegisterClassW(&wc)) {
|
||||
windisplay_cat.error()
|
||||
<< "could not register window class " << wclass._name << "!" << endl;
|
||||
return wclass;
|
||||
|
@ -242,7 +242,7 @@ private:
|
||||
INLINE WindowClass(const WindowProperties &props);
|
||||
INLINE bool operator < (const WindowClass &other) const;
|
||||
|
||||
string _name;
|
||||
wstring _name;
|
||||
HICON _icon;
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user