始めまして、自分は初心者です。今業務用ハンディターミナルの開発をしています。作ったアプリケーションが起動後、HTの「OK」キーを押すとアプリがフリーズします。「OK」キー押下のイベントを調べたいですが、どうすればよいですか?
私もハンディーターミナル用のソフト開発したことありますが
メーカー・型式・OSや開発環境
が解らないので、全く助言のしようもありません。
またそれらが解ったところで、その機種特有の問題かもしれま
せんので、メーカーにお問い合わせ頂くしか手はないように思
いますが・・・
以上。
返事を頂き、有難うございます。私はSHARPの1500シリーズを使って開発しています、開発環境はeMVC++4.0です。また、アプリはタブコントロールを使いました。「OK」キーを押すと、edit boxを持っている子ウィンドウのみフリーズします。原因が分からないので、悩んでいます。お助けてください。
SHARPの1500シリーズって、HandyBrainのRS-1500シリーズのことです
よネ?できるだけ正しく商品型式は表記して下さい。
え〜と・・・コペルニクスでは開発したことがありますが、当時の物
としての搭載OSは、CE.NET 4.1 でした。RZ-1500は、CE5.0ですの
で、開発用推奨言語は、eVC++4.0では無いと思いますが・・・
仮に使えたとして、SHARPよりSDKが提供されているはずですが、
インストールされていますか?
環境が全て正しく導入されていて正しく動作しないのであれば・・・
シャープシステムプロダクト株式会社の方にお問い合わせして頂かな
いと解りません。
あしからず・・・
以上。
オショウさん
いろいろ教えてくれて、有難うございます。RZ-1500シリーズのSDKをもう一度確認してみます。
単純なダイアログとEditだけを使ったアプリでも
ハングしてしまいますか?
エミュレータでも同様の動きですか?
イベントについては、RZ-1500は使ったことがありませんが単純に
OK = VK_RETURN
ということはないですか?
であれば、WM_KEYDOWN(OnKeyDown)の所で取得できると思います。
#他の機能でも使うボタンだと思うのであえて変なキーコード
#を割り当てる必要がないかと思います。
ちなみにリモートデバッグですか?
単純なダイアログとEditだけを使ったアプリは問題がないです。私は以下のソースを入れましたが、
BOOL CSampleDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
switch(pMsg->message){
GetMessage ( pMsg,NULL,0,0);
case WM_KEYDOWN:
switch(pMsg->wParam){
case VK_RETURN:
****
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
送られたメッセージが取れそうですが、***の部分はどんな処理を書けばいいのが分からないです。実は、OKキーは他のどんな機能で使われてるのもまだ分からないです。SDKのなかも載っていないみたいです。親ウィンドウをも一回調べようと思っています。
確認のためなら中身は何でもいいと思いますが
Editのメンバ変数でも定義して表示してみては?
switch(pMsg->message){
case WM_KEYDOWN:
switch(pMsg->wParam){
case VK_RETURN:
m_edit.SetWindowText(_T("return"));
}
}
>単純なダイアログとEditだけを使ったアプリは問題がないです
現在提示されている情報だと、ハングするのは作成したプログラムに
問題があるとしか言えなくなってしまいます。
エミュレータやリモートデバッグならTRACEや
ブレークポイントを貼れば停止しますのでステップ実行で
確認していけば問題点の特定は難しくないはずですが
ひょっとしていきなり実機用のexeを作って
本体で動作確認をしていますか?
私はもう一度子ウィンドウ一つしか持たないタブコントロールを作ってみました。
BOOL CSampleDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// このダイアログ用のアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログで
// ないときはフレームワークは自動的に行います。
SetIcon(m_hIcon, TRUE); // 大きいアイコンを設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンを設定
CenterWindow(GetDesktopWindow()); // HPC 画面の中央へ揃えます
// TODO: 追加の初期化を行うときにはこの場所に追加してください。
{
int err = 0;
CRect rect;
// 子ダイアログ作成
if (!err) {
if (!this->m_dlg1.Create(CDialog1::IDD, &this->m_Tab)) {
err = 1;
}
}
// 子ダイアログ移動
if (!err)
{
//this->m_Tab.GetWindowRect(&rect);
this->m_dlg1.GetClientRect(&rect);
rect.OffsetRect(10, 40);
this->m_dlg1.MoveWindow(&rect, FALSE);
}
// タブ作成
if (!err) {
if (this->m_Tab.InsertItem(0, _T("設定")) == -1) {
err = 1;
}
}
// 初期表示
if (!err) {
this->OnSelchangeTab1(0, 0);
}
}
return TRUE; // コントロールにフォーカスを設定しない場合は TRUE を返します
}
void CSampleDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
int sel;
sel = this->m_Tab.GetCurSel();
CString s;
s.Format(_T("%d"), sel);
this->m_dlg1.ShowWindow(sel == 0 ? SW_SHOW : SW_HIDE);
*pResult = 0;
}
子ウィンドウはedit boxを設置するだけです。OKキー押すと同じくフリーズしますが、親ウィンドウの問題でしょうか?
>OKキーは他のどんな機能で使われてるのもまだ分からないです
ごめんなさい。言い方がまずかったです。
例えばメモ帳を開いてOKボタンで改行しませんか
改行するのであれば通常のVK_RETURNだと思います。
そのほか数字ボタンやカーソルなどについても
刻印されている文字と同じものが表示(動作)されませんか?
という意味です。
>OKキーは他のどんな機能で使われてるのもまだ分からないです
ごめんなさい。言い方がまずかったです。
例えばメモ帳を開いてOKボタンで改行しませんか
改行するのであれば通常のVK_RETURNだと思います。
そのほか数字ボタンやカーソルなどについても
刻印されている文字と同じものが表示(動作)されませんか?
という意味です。
本当に有難うございます、"例えばメモ帳を開いてOKボタンで改行しませんか"という言葉で閃いた。edit boxのスタイルを複数行に変更したら、できました。有難うございます。
ツイート | ![]() |